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.126.12010000.2 2008/09/22 11:46:45 ajaising 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 <> l_global_location_number
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       BEGIN
6754           SELECT 'Y'
6755           INTO   l_dummy
6756           FROM   HZ_PARTY_SITE_USES
6757           -- Bug 3988537.
6758           WHERE  PARTY_SITE_ID = nvl(p_party_site_use_rec.party_site_id,l_party_site_id)
6759           AND    SITE_USE_TYPE = nvl(p_party_site_use_rec.site_use_type,l_site_use_type)
6760           AND    STATUS = 'A'
6761           AND    PARTY_SITE_USE_ID <> NVL(p_party_site_use_rec.party_site_use_id, fnd_api.g_miss_num);
6762 
6763           fnd_message.set_name('AR', 'HZ_API_UNIQUE_SITE_USE_TYPE');
6764           fnd_msg_pub.add;
6765           x_return_status := fnd_api.g_ret_sts_error;
6766 
6767       EXCEPTION
6768           WHEN NO_DATA_FOUND THEN
6769               NULL;
6770       END;
6771 
6772       /*IF g_debug THEN
6773           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6774               'combination of party_site_id and site_use_type is unique. ' ||
6775               'x_return_status = ' || x_return_status, l_debug_prefix);
6776       END IF;
6777       */
6778       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6779            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6780            p_message=>'combination of party_site_id and site_use_type is unique. ' ||
6781                 'x_return_status = ' || x_return_status,
6782                                   p_msg_level=>fnd_log.level_statement);
6783       END IF;
6784 
6785 
6786       ------------------
6787       -- validate status
6788       ------------------
6789 
6790       -- status cannot be set to null during update
6791       IF p_create_update_flag = 'U' THEN
6792           validate_cannot_update_to_null (
6793               p_column                                => 'status',
6794               p_column_value                          => p_party_site_use_rec.status,
6795               x_return_status                         => x_return_status);
6796       END IF;
6797 
6798 /****Logical APIs - validation not required****/
6799   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
6800       -- status is lookup code in lookup type REGISTRY_STATUS
6801       IF p_party_site_use_rec.status IS NOT NULL
6802          AND
6803          p_party_site_use_rec.status <> fnd_api.g_miss_char
6804          AND
6805          (p_create_update_flag = 'C'
6806           OR
6807           (p_create_update_flag = 'U'
6808            AND
6809            p_party_site_use_rec.status <> NVL(l_status, fnd_api.g_miss_char)
6810          )
6811         )
6812       THEN
6813           validate_lookup (
6814               p_column                                => 'status',
6815               p_lookup_type                           => 'REGISTRY_STATUS',
6816               p_column_value                          => p_party_site_use_rec.status,
6817               x_return_status                         => x_return_status);
6818 
6819           /*IF g_debug THEN
6820               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6821                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
6822                   'x_return_status = ' || x_return_status, l_debug_prefix);
6823           END IF;
6824           */
6825           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6826            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6827            p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
6828                   'x_return_status = ' || x_return_status,
6829                                   p_msg_level=>fnd_log.level_statement);
6830           END IF;
6831 
6832 
6833       END IF;
6834   END IF;
6835 
6836       --------------------------------------
6837       -- validate created_by_module
6838       --------------------------------------
6839 
6840       validate_created_by_module(
6841         p_create_update_flag     => p_create_update_flag,
6842         p_created_by_module      => p_party_site_use_rec.created_by_module,
6843         p_old_created_by_module  => l_created_by_module,
6844         x_return_status          => x_return_status);
6845 
6846       --------------------------------------
6847       -- validate application_id
6848       --------------------------------------
6849 
6850       validate_application_id(
6851         p_create_update_flag     => p_create_update_flag,
6852         p_application_id         => p_party_site_use_rec.application_id,
6853         p_old_application_id     => l_application_id,
6854         x_return_status          => x_return_status);
6855 
6856       -- Bug 2065191.status and primary_per_type cannot be 'I' and 'Y' at the same time.
6857       ----------------------------------------
6858       -- validate primary_per_type and status.
6859       ----------------------------------------
6860 
6861       IF NVL(p_party_site_use_rec.primary_per_type,l_primary_per_type) ='Y'
6862       AND NVL(p_party_site_use_rec.status,l_status) = 'I'
6863       THEN
6864           FND_MESSAGE.SET_NAME('AR','HZ_API_INACTIVE_CANNOT_PRIM');
6865           FND_MESSAGE.SET_TOKEN('ENTITY','Party Site Use');
6866       --    FND_MESSAGE.SET_TOKEN('COLUMN1','PRIMARY_PER_TYPE');
6867       --    FND_MESSAGE.SET_TOKEN('COLUMN2','STATUS');
6868           FND_MSG_PUB.ADD;
6869           x_return_status := FND_API.G_RET_STS_ERROR;
6870       END IF;
6871 
6872 
6873       -- Debug info.
6874       /*IF g_debug THEN
6875           hz_utility_v2pub.debug ('validate_party_site_use (-)');
6876       END IF;
6877       */
6878       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6879         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_party_site_use (-)',
6880                                p_msg_level=>fnd_log.level_procedure);
6881       END IF;
6882 
6883 
6884       --disable_debug;
6885 
6886   END validate_party_site_use;
6887 
6888   /**
6889    * PROCEDURE validate_org_contact
6890    *
6891    * DESCRIPTION
6892    *     Validates org contact record. Checks for
6893    *         uniqueness
6894    *         lookup types
6895    *         mandatory columns
6896    *         non-updateable fields
6897    *         foreign key validations
6898    *         other validations
6899    *
6900    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
6901    *
6902    * ARGUMENTS
6903    *   IN:
6904    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
6905    *     p_org_contact_rec              Org contact record.
6906    *     p_rowid                        Rowid of the record (used only in update mode).
6907    *   IN/OUT:
6908    *     x_return_status                Return status after the call. The status can
6909    *                                    be FND_API.G_RET_STS_SUCCESS (success),
6910    *                                    fnd_api.g_ret_sts_error (error),
6911    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
6912    *
6913    * NOTES
6914    *
6915    * MODIFICATION HISTORY
6916    *
6917    *   07-23-2001    Indrajit Sen       o Created.
6918    *
6919    */
6920 
6921   PROCEDURE validate_org_contact(
6922       p_create_update_flag      IN      VARCHAR2,
6923       p_org_contact_rec         IN      HZ_PARTY_CONTACT_V2PUB.ORG_CONTACT_REC_TYPE,
6924       p_rowid                   IN      ROWID,
6925       x_return_status           IN OUT NOCOPY  VARCHAR2
6926  ) IS
6927 
6928       l_party_relationship_id           NUMBER;
6929       l_dummy                           VARCHAR2(1);
6930       l_created_by_module               VARCHAR2(150);
6931       l_application_id                  NUMBER;
6932       -- l_title                           VARCHAR2(30);
6933       l_job_title_code                  VARCHAR2(30);
6934       l_department_code                 VARCHAR2(30);
6935       l_debug_prefix                    VARCHAR2(30) := '';
6936 
6937   BEGIN
6938 
6939       --enable_debug;
6940 
6941       -- Debug info.
6942       /*IF g_debug THEN
6943           hz_utility_v2pub.debug ('validate_org_contact (+)');
6944       END IF;
6945       */
6946       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
6947         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_org_contact (+)',
6948                                p_msg_level=>fnd_log.level_procedure);
6949       END IF;
6950 
6951 
6952       -- select fields for later use during update.
6953       IF p_create_update_flag = 'U' THEN
6954           SELECT PARTY_RELATIONSHIP_ID,
6955                  -- TITLE,
6956                  JOB_TITLE_CODE,
6957                  DEPARTMENT_CODE,
6958                  CREATED_BY_MODULE,
6959                  APPLICATION_ID
6960           INTO   l_party_relationship_id,
6961                  -- l_title,
6962                  l_job_title_code,
6963                  l_department_code,
6964                  l_created_by_module,
6965                  l_application_id
6966           FROM   HZ_ORG_CONTACTS
6967           WHERE  ROWID = p_rowid;
6968       END IF;
6969 
6970       ---------------------------------
6971       -- validate party_relationship_id
6972       ---------------------------------
6973 
6974       -- party_relationship_id is non-updateable field
6975       IF p_create_update_flag = 'U' THEN
6976           validate_nonupdateable (
6977               p_column                                => 'party_relationship_id',
6978               p_column_value                          => p_org_contact_rec.party_rel_rec.relationship_id,
6979               p_old_column_value                      => l_party_relationship_id,
6980               x_return_status                         => x_return_status);
6981 
6982           /*IF g_debug THEN
6983               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
6984                   'party_relationship_id is non-updateable field. ' ||
6985                   'x_return_status = ' || x_return_status, l_debug_prefix);
6986           END IF;
6987           */
6988           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
6989            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_relationship_id is non-updateable field. ' ||
6990                   'x_return_status = ' || x_return_status,
6991                                   p_msg_level=>fnd_log.level_statement);
6992           END IF;
6993 
6994 
6995       END IF;
6996 
6997       /* comment out the validation as the title column is obsoleted in r12
6998       -----------------
6999       -- validate title
7000       -----------------
7001 
7002       -- title is lookup code in lookup type CONTACT_TITLE
7003       IF p_org_contact_rec.title IS NOT NULL
7004          AND
7005          p_org_contact_rec.title <> fnd_api.g_miss_char
7006          AND
7007          (p_create_update_flag = 'C'
7008           OR
7009           (p_create_update_flag = 'U'
7010            AND
7011            p_org_contact_rec.title <> NVL(l_title, fnd_api.g_miss_char)
7012          )
7013         )
7014       THEN
7015           validate_lookup (
7016               p_column                                => 'title',
7017               p_lookup_type                           => 'CONTACT_TITLE',
7018               p_column_value                          => p_org_contact_rec.title,
7019               x_return_status                         => x_return_status);
7020 
7021           -- IF g_debug THEN
7022           --    hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7023           --        'title is lookup code in lookup type CONTACT_TITLE. ' ||
7024           --        'x_return_status = ' || x_return_status, l_debug_prefix);
7025           --- END IF;
7026 
7027           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7028            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'title is lookup code in lookup type CONTACT_TITLE. ' ||
7029                   'x_return_status = ' || x_return_status,
7030                                   p_msg_level=>fnd_log.level_statement);
7031           END IF;
7032 
7033 
7034       END IF;
7035       */
7036 
7037       --------------------------
7038       -- validate job_title_code
7039       --------------------------
7040 
7041       -- job_title_code is lookup code in lookup type RESPONSIBILITY
7042       IF p_org_contact_rec.job_title_code IS NOT NULL
7043          AND
7044          p_org_contact_rec.job_title_code <> fnd_api.g_miss_char
7045          AND
7046          (p_create_update_flag = 'C'
7047           OR
7048           (p_create_update_flag = 'U'
7049            AND
7050            p_org_contact_rec.job_title_code <> NVL(l_job_title_code, fnd_api.g_miss_char)
7051          )
7052         )
7053       THEN
7054           validate_lookup (
7055               p_column                                => 'job_title_code',
7056               p_lookup_type                           => 'RESPONSIBILITY',
7057               p_column_value                          => p_org_contact_rec.job_title_code,
7058               x_return_status                         => x_return_status);
7059 
7060           /*IF g_debug THEN
7061               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7062                   'job_title_code is lookup code in lookup type RESPONSIBILITY. ' ||
7063                   'x_return_status = ' || x_return_status, l_debug_prefix);
7064           END IF;
7065           */
7066           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7067                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7068                 p_message=>'job_title_code is lookup code in lookup type RESPONSIBILITY. ' ||
7069                   'x_return_status = ' || x_return_status,
7070                                   p_msg_level=>fnd_log.level_statement);
7071           END IF;
7072 
7073 
7074       END IF;
7075 
7076       -------------------------------
7077       -- validate decision_maker_flag
7078       -------------------------------
7079 /****Logical APIs - validation not required****/
7080   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7081       -- decision_maker_flag is lookup code in lookup type YES/NO
7082       validate_lookup (
7083           p_column                                => 'decision_maker_flag',
7084           p_lookup_type                           => 'YES/NO',
7085           p_column_value                          => p_org_contact_rec.decision_maker_flag,
7086           x_return_status                         => x_return_status);
7087 
7088       /*IF g_debug THEN
7089           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7090               'decision_maker_flag should be in lookup YES/NO. ' ||
7091               'x_return_status = ' || x_return_status, l_debug_prefix);
7092       END IF;
7093       */
7094       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7095            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'decision_maker_flag should be in lookup YES/NO. ' ||
7096               'x_return_status = ' || x_return_status,
7097                                   p_msg_level=>fnd_log.level_statement);
7098        END IF;
7099   END IF;
7100 
7101       ------------------------------
7102       -- validate reference_use_flag
7103       ------------------------------
7104 /****Logical APIs - validation not required****/
7105   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7106       -- reference_use_flag is lookup code in lookup type YES/NO
7107       validate_lookup (
7108           p_column                                => 'reference_use_flag',
7109           p_lookup_type                           => 'YES/NO',
7110           p_column_value                          => p_org_contact_rec.reference_use_flag,
7111           x_return_status                         => x_return_status);
7112 
7113       /*IF g_debug THEN
7114           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7115               'reference_use_flag should be in lookup YES/NO. ' ||
7116               'x_return_status = ' || x_return_status, l_debug_prefix);
7117       END IF;
7118       */
7119       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7120            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'reference_use_flag should be in lookup YES/NO. ' ||
7121               'x_return_status = ' || x_return_status,
7122                                   p_msg_level=>fnd_log.level_statement);
7123     END IF;
7124   END IF;
7125 
7126       ---------------------------
7127       -- validate department_code
7128       ---------------------------
7129 
7130       -- department_code is lookup code in lookup type DEPARTMENT_TYPE
7131       IF p_org_contact_rec.department_code IS NOT NULL
7132          AND
7133          p_org_contact_rec.department_code <> fnd_api.g_miss_char
7134          AND
7135          (p_create_update_flag = 'C'
7136           OR
7137           (p_create_update_flag = 'U'
7138            AND
7139            p_org_contact_rec.department_code <> NVL(l_department_code, fnd_api.g_miss_char)
7140          )
7141         )
7142       THEN
7143           validate_lookup (
7144               p_column                                => 'department_code',
7145               p_lookup_type                           => 'DEPARTMENT_TYPE',
7146               p_column_value                          => p_org_contact_rec.department_code,
7147               x_return_status                         => x_return_status);
7148 
7149           /*IF g_debug THEN
7150               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7151                   'department_code is lookup code in lookup type DEPARTMENT_TYPE. ' ||
7152                   'x_return_status = ' || x_return_status, l_debug_prefix);
7153           END IF;
7154           */
7155           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7156                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7157                 p_message=>'department_code is lookup code in lookup type DEPARTMENT_TYPE. ' ||
7158                   'x_return_status = ' || x_return_status,
7159                                   p_msg_level=>fnd_log.level_statement);
7160           END IF;
7161 
7162 
7163       END IF;
7164 
7165       -------------------------
7166       -- validate party_site_id
7167       -------------------------
7168 
7169       -- if party_site_id is passed, then it must be validated as
7170       -- foreign key to hz_party_sites.party_site_id
7171       IF p_org_contact_rec.party_site_id IS NOT NULL
7172          AND
7173          p_org_contact_rec.party_site_id <> fnd_api.g_miss_num
7174       THEN
7175           BEGIN
7176               SELECT 'Y'
7177               INTO   l_dummy
7178               FROM   HZ_PARTY_SITES
7179               WHERE  PARTY_SITE_ID = p_org_contact_rec.party_site_id;
7180           EXCEPTION
7181               WHEN NO_DATA_FOUND THEN
7182                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
7183                   fnd_message.set_token('FK', 'party_site_id');
7184                   fnd_message.set_token('COLUMN', 'party_site_id');
7185                   fnd_message.set_token('TABLE', 'hz_party_sites');
7186                   fnd_msg_pub.add;
7187                   x_return_status := fnd_api.g_ret_sts_error;
7188           END;
7189 
7190           /*IF g_debug THEN
7191               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7192                   'party_site_id is foreign key to hz_party_sites.party_site_id. ' ||
7193                   'x_return_status = ' || x_return_status, l_debug_prefix);
7194           END IF;
7195           */
7196           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7197                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7198                 p_message=>'party_site_id is foreign key to hz_party_sites.party_site_id. ' ||
7199                   'x_return_status = ' || x_return_status,
7200                                   p_msg_level=>fnd_log.level_statement);
7201          END IF;
7202 
7203 
7204       END IF;
7205 
7206       -- if party_site_id is passed then its party_id should be
7207       -- same as the object_id of the relationship record for the org_contact
7208       IF p_org_contact_rec.party_site_id IS NOT NULL
7209          AND
7210          p_org_contact_rec.party_site_id <> fnd_api.g_miss_num
7211       THEN
7212           BEGIN
7213               SELECT 'Y'
7214               INTO   l_dummy
7215               FROM   HZ_PARTY_SITES
7216               WHERE  PARTY_SITE_ID = p_org_contact_rec.party_site_id
7217               AND    PARTY_ID = p_org_contact_rec.party_rel_rec.object_id;
7218           EXCEPTION
7219               WHEN NO_DATA_FOUND THEN
7220                   fnd_message.set_name('AR', 'HZ_API_PARTY_OBJECT_MISMATCH');
7221                   fnd_msg_pub.add;
7222                   x_return_status := fnd_api.g_ret_sts_error;
7223           END;
7224 
7225           /*IF g_debug THEN
7226               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7227                   'party_id of party site should be same as the object_id of the relationship record. ' ||
7228                   'x_return_status = ' || x_return_status, l_debug_prefix);
7229           END IF;
7230           */
7231           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7232             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7233             p_message=>'party_id of party site should be same as the object_id of the relationship record. ' ||
7234                   'x_return_status = ' || x_return_status,
7235                                   p_msg_level=>fnd_log.level_statement);
7236           END IF;
7237 
7238 
7239       END IF;
7240 
7241       --------------------------------------
7242       -- validate created_by_module
7243       --------------------------------------
7244 
7245       validate_created_by_module(
7246         p_create_update_flag     => p_create_update_flag,
7247         p_created_by_module      => p_org_contact_rec.created_by_module,
7248         p_old_created_by_module  => l_created_by_module,
7249         x_return_status          => x_return_status);
7250 
7251       --------------------------------------
7252       -- validate application_id
7253       --------------------------------------
7254 
7255       validate_application_id(
7256         p_create_update_flag     => p_create_update_flag,
7257         p_application_id         => p_org_contact_rec.application_id,
7258         p_old_application_id     => l_application_id,
7259         x_return_status          => x_return_status);
7260 
7261       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7262         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_org_contact (-)',
7263                                p_msg_level=>fnd_log.level_procedure);
7264     END IF;
7265 
7266   END validate_org_contact;
7267 
7268   /**
7269    * PROCEDURE validate_org_contact_role
7270    *
7271    * DESCRIPTION
7272    *     Validates org contact role record. Checks for
7273    *         uniqueness
7274    *         lookup types
7275    *         mandatory columns
7276    *         non-updateable fields
7277    *         foreign key validations
7278    *         other validations
7279    *
7280    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
7281    *
7282    * ARGUMENTS
7283    *   IN:
7284    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
7285    *     p_org_contact_role_rec         Org contact role record.
7286    *     p_rowid                        Rowid of the record (used only in update mode).
7287    *   IN/OUT:
7288    *     x_return_status                Return status after the call. The status can
7289    *                                    be FND_API.G_RET_STS_SUCCESS (success),
7290    *                                    fnd_api.g_ret_sts_error (error),
7291    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
7292    *
7293    * NOTES
7294    *
7295    * MODIFICATION HISTORY
7296    *
7297    *   07-23-2001    Indrajit Sen       o Created.
7298    *
7299    */
7300 
7301   PROCEDURE validate_org_contact_role(
7302       p_create_update_flag      IN      VARCHAR2,
7303       p_org_contact_role_rec    IN      HZ_PARTY_CONTACT_V2PUB.ORG_CONTACT_ROLE_REC_TYPE,
7304       p_rowid                   IN      ROWID,
7305       x_return_status       IN OUT NOCOPY      VARCHAR2
7306  ) IS
7307 
7308       l_org_contact_id                  NUMBER;
7309       l_orig_system_reference           VARCHAR2(240);
7310       l_role_id                         NUMBER;
7311       l_dummy                           VARCHAR2(1);
7312       l_created_by_module               VARCHAR2(150);
7313       l_application_id                  NUMBER;
7314       l_count                           NUMBER;
7315       l_status                          VARCHAR2(1);
7316       l_debug_prefix                    VARCHAR2(30) := '';
7317       l_validate_osr varchar2(1) := 'Y';
7318       l_mosr_owner_table_id number;
7319       l_temp_return_status   VARCHAR2(10); -- for storing return status from
7320                                            -- hz_orig_system_ref_pub.get_owner_table_id
7321   BEGIN
7322 
7323       --enable_debug;
7324 
7325       -- Debug info.
7326       /*IF g_debug THEN
7327           hz_utility_v2pub.debug ('validate_org_contact_role (+)');
7328       END IF;
7329       */
7330       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7331         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_org_contact_role (+)',
7332                                p_msg_level=>fnd_log.level_procedure);
7333       END IF;
7334 
7335       IF p_create_update_flag = 'U' THEN
7336           SELECT ORG_CONTACT_ID,
7337                  ORIG_SYSTEM_REFERENCE,
7338                  STATUS,
7339                  CREATED_BY_MODULE,
7340                  APPLICATION_ID
7341           INTO   l_org_contact_id,
7342                  l_orig_system_reference,
7343                  l_status,
7344                  l_created_by_module,
7345                  l_application_id
7346           FROM   HZ_ORG_CONTACT_ROLES
7347           WHERE  ROWID = p_rowid;
7348       END IF;
7349 
7350       --------------------------
7351       -- validate org_contact_id
7352       --------------------------
7353 /****Logical APIs - validation not required****/
7354   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7355       -- org_contact_id is mandatory field
7356       validate_mandatory (
7357           p_create_update_flag                    => p_create_update_flag,
7358           p_column                                => 'org_contact_id',
7359           p_column_value                          => p_org_contact_role_rec.org_contact_id,
7360           x_return_status                         => x_return_status);
7361 
7362       /*IF g_debug THEN
7363           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7364               'org_contact_id is mandatory field. ' ||
7365               'x_return_status = ' || x_return_status, l_debug_prefix);
7366       END IF;
7367       */
7368       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7369            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'org_contact_id is mandatory field. ' ||
7370               'x_return_status = ' || x_return_status,
7371                                   p_msg_level=>fnd_log.level_statement);
7372       END IF;
7373 
7374       -- org_contact_id is non-updateable field
7375       IF p_create_update_flag = 'U' THEN
7376           validate_nonupdateable (
7377               p_column                                => 'org_contact_id',
7378               p_column_value                          => p_org_contact_role_rec.org_contact_id,
7379               p_old_column_value                      => l_org_contact_id,
7380               x_return_status                         => x_return_status);
7381 
7382           /*IF g_debug THEN
7383               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7384                   'org_contact_id is non-updateable field. ' ||
7385                   'x_return_status = ' || x_return_status, l_debug_prefix);
7386           END IF;
7387           */
7388           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7389             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'org_contact_id is non-updateable field. ' ||
7390                   'x_return_status = ' || x_return_status,
7391                                   p_msg_level=>fnd_log.level_statement);
7392          END IF;
7393 
7394       END IF;
7395 
7396       -- org_contact_id is foreign key of hz_org_contacts.org_contact_id.
7397       -- do not need to check during update because org_contact_id is
7398       -- non-updateable.
7399       IF p_create_update_flag = 'C'
7400          AND
7401          p_org_contact_role_rec.org_contact_id IS NOT NULL
7402          AND p_org_contact_role_rec.org_contact_id <> fnd_api.g_miss_num
7403       THEN
7404           BEGIN
7405               SELECT 'Y'
7406               INTO   l_dummy
7407               FROM   HZ_ORG_CONTACTS
7408               WHERE  ORG_CONTACT_ID = p_org_contact_role_rec.org_contact_id;
7409           EXCEPTION
7410               WHEN NO_DATA_FOUND THEN
7411                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
7412                   fnd_message.set_token('FK', 'org_contact_id');
7413                   fnd_message.set_token('COLUMN', 'org_contact_id');
7414                   fnd_message.set_token('TABLE', 'hz_org_contacts');
7415                   fnd_msg_pub.add;
7416                   x_return_status := fnd_api.g_ret_sts_error;
7417           END;
7418 
7419           /*IF g_debug THEN
7420               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7421                   'org_contact_id is foreign key of hz_org_contacts.org_contact_id. ' ||
7422                   'x_return_status = ' || x_return_status, l_debug_prefix);
7423           END IF;
7424           */
7425           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7426                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7427                 p_message=>'org_contact_id is foreign key of hz_org_contacts.org_contact_id. ' ||
7428                   'x_return_status = ' || x_return_status,
7429                                   p_msg_level=>fnd_log.level_statement);
7430           END IF;
7431 
7432       END IF;
7433   END IF;
7434 
7435       ---------------------------------
7436       -- validate orig_system_reference
7437       ---------------------------------
7438 /****Logical APIs - validation not required****/
7439   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7440       IF (p_org_contact_role_rec.orig_system is not null
7441          and p_org_contact_role_rec.orig_system <>fnd_api.g_miss_char)
7442        and (p_org_contact_role_rec.orig_system_reference is not null
7443          and p_org_contact_role_rec.orig_system_reference <>fnd_api.g_miss_char)
7444          and p_create_update_flag = 'U'
7445 
7446         then
7447            hz_orig_system_ref_pub.get_owner_table_id
7448                         (p_orig_system => p_org_contact_role_rec.orig_system,
7449                         p_orig_system_reference => p_org_contact_role_rec.orig_system_reference,
7450                         p_owner_table_name => 'HZ_ORG_CONTACT_ROLES',
7451                         x_owner_table_id => l_mosr_owner_table_id,
7452                         x_return_status => l_temp_return_status);
7453 
7454            IF (l_temp_return_status = fnd_api.g_ret_sts_success AND
7455 		       l_mosr_owner_table_id= nvl(p_org_contact_role_rec.org_contact_role_id,l_mosr_owner_table_id))
7456            THEN
7457                 l_validate_osr := 'N';
7458             -- if we can get owner_table_id based on osr and os in mosr table,
7459             -- we will use unique osr and os for update - bypass osr validation
7460            ELSE l_validate_osr := 'Y';
7461            END IF;
7462 
7463            -- Call to hz_orig_system_ref_pub.get_owner_table_id API was resetting the
7464            -- x_return_status. Set x_return_status to error, ONLY if there is error.
7465            -- In case of success, leave it to carry over previous value as before this call.
7466            -- Fix for Bug 5498116 (29-AUG-2006)
7467            IF (l_temp_return_status = FND_API.G_RET_STS_ERROR) THEN
7468              x_return_status := l_temp_return_status;
7469            END IF;
7470 
7471     end if;
7472       -- orig_system_reference is non-updateable field
7473       IF p_create_update_flag = 'U'  and l_validate_osr = 'Y' THEN
7474           validate_nonupdateable (
7475               p_column                                => 'orig_system_reference',
7476               p_column_value                          => p_org_contact_role_rec.orig_system_reference,
7477               p_old_column_value                      => l_orig_system_reference,
7478               x_return_status                         => x_return_status);
7479 
7480           /*IF g_debug THEN
7481               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7482                   'orig_system_reference is non-updateable field. ' ||
7483                   'x_return_status = ' || x_return_status, l_debug_prefix);
7484           END IF;
7485           */
7486           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7487                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7488                 p_message=>'orig_system_reference is non-updateable field. ' ||
7489                   'x_return_status = ' || x_return_status,
7490                                   p_msg_level=>fnd_log.level_statement);
7491           END IF;
7492 
7493       END IF;
7494   END IF;
7495 
7496       ---------------------
7497       -- validate role_type
7498       ---------------------
7499 
7500       -- role_type is mandatory field
7501       validate_mandatory (
7502           p_create_update_flag                    => p_create_update_flag,
7503           p_column                                => 'role_type',
7504           p_column_value                          => p_org_contact_role_rec.role_type,
7505           x_return_status                         => x_return_status);
7506 
7507       /*IF g_debug THEN
7508           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7509               'role_type is mandatory field. ' ||
7510               'x_return_status = ' || x_return_status, l_debug_prefix);
7511       END IF;
7512       */
7513       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7514            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'role_type is mandatory field. ' ||
7515               'x_return_status = ' || x_return_status,
7516                                   p_msg_level=>fnd_log.level_statement);
7517       END IF;
7518 
7519       -- role_type cannot be set to null during update
7520       IF p_create_update_flag = 'U' THEN
7521           validate_cannot_update_to_null (
7522               p_column                                => 'role_type',
7523               p_column_value                          => p_org_contact_role_rec.role_type,
7524               x_return_status                         => x_return_status);
7525 
7526           /*IF g_debug THEN
7527               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7528                   'role_type cannot be set to null during update. ' ||
7529                   'x_return_status = ' || x_return_status, l_debug_prefix);
7530           END IF;
7531           */
7532           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7533              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7534              p_message=>'role_type cannot be set to null during update. ' ||
7535                   'x_return_status = ' || x_return_status,
7536                                   p_msg_level=>fnd_log.level_statement);
7537           END IF;
7538 
7539       END IF;
7540 
7541       -- role_type is lookup code in lookup type CONTACT_ROLE_TYPE
7542       validate_lookup (
7543           p_column                                => 'role_type',
7544           p_lookup_type                           => 'CONTACT_ROLE_TYPE',
7545           p_column_value                          => p_org_contact_role_rec.role_type,
7546           x_return_status                         => x_return_status);
7547 
7548       /*IF g_debug THEN
7549           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7550               'role_type is lookup code in lookup type CONTACT_ROLE_TYPE. ' ||
7551               'x_return_status = ' || x_return_status, l_debug_prefix);
7552       END IF;
7553       */
7554       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7555            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7556            p_message=>'role_type is lookup code in lookup type CONTACT_ROLE_TYPE. ' ||
7557               'x_return_status = ' || x_return_status,
7558                                   p_msg_level=>fnd_log.level_statement);
7559       END IF;
7560 
7561       ------------------------
7562       -- validate primary_flag
7563       ------------------------
7564 /****Logical APIs - validation not required****/
7565   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7566       -- primary_flag is lookup code in lookup type YES/NO
7567       validate_lookup (
7568           p_column                                => 'primary_flag',
7569           p_lookup_type                           => 'YES/NO',
7570           p_column_value                          => p_org_contact_role_rec.primary_flag,
7571           x_return_status                         => x_return_status);
7572 
7573       /*IF g_debug THEN
7574           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7575               'primary_flag should be in lookup YES/NO. ' ||
7576               'x_return_status = ' || x_return_status, l_debug_prefix);
7577       END IF;
7578       */
7579       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7580            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'primary_flag should be in lookup YES/NO. ' ||
7581               'x_return_status = ' || x_return_status,
7582                                   p_msg_level=>fnd_log.level_statement);
7583       END IF;
7584   END IF;
7585 
7586       -- primary_flag can be set only for one record of org_contact_id.
7587       IF p_org_contact_role_rec.primary_flag = 'Y' THEN
7588           BEGIN
7589               SELECT ORG_CONTACT_ROLE_ID
7590               INTO   l_role_id
7591               FROM   HZ_ORG_CONTACT_ROLES
7592               WHERE  ORG_CONTACT_ID = p_org_contact_role_rec.org_contact_id
7593               AND    PRIMARY_FLAG = 'Y'
7594               AND    ROWNUM  = 1;
7595               /* Bug Fix: 3936336 */
7596               IF        l_role_id <> p_org_contact_role_rec.org_contact_role_id OR
7597                         p_create_update_flag = 'C' THEN
7598                         fnd_message.set_name('AR', 'HZ_API_UNIQUE_PRIMARY_ROLE');
7599                         fnd_msg_pub.add;
7600                         x_return_status := fnd_api.g_ret_sts_error;
7601               END IF;
7602           EXCEPTION
7603               WHEN NO_DATA_FOUND THEN
7604                   NULL;
7605           END;
7606 
7607           /*IF g_debug THEN
7608               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7609                   'primary_flag can be set only for one record of org_contact_id. ' ||
7610                   'x_return_status = ' || x_return_status, l_debug_prefix);
7611           END IF;
7612           */
7613           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7614             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7615             p_message=>'primary_flag can be set only for one record of org_contact_id. ' ||
7616                   'x_return_status = ' || x_return_status,
7617                                   p_msg_level=>fnd_log.level_statement);
7618           END IF;
7619 
7620       END IF;
7621 
7622       -------------------------------------------------------
7623       -- validate combination of org_contact_id and role_type
7624       -------------------------------------------------------
7625 
7626       -- combination of org_contact_id and role_type must be unique.
7627       -- validates only when role_id in the database is different from
7628       -- the role_id to be updated.
7629 
7630       BEGIN
7631           SELECT ORG_CONTACT_ROLE_ID
7632           INTO   l_role_id
7633           FROM   HZ_ORG_CONTACT_ROLES
7634           WHERE  ORG_CONTACT_ID = NVL(p_org_contact_role_rec.org_contact_id, fnd_api.g_miss_num)
7635           AND    ROLE_TYPE      = p_org_contact_role_rec.role_type
7636           AND    STATUS         = 'A' -- Added: Bug#6411541
7637           AND    ROWNUM         = 1;
7638 
7639           IF l_role_id <> nvl(p_org_contact_role_rec.org_contact_role_id, fnd_api.g_miss_num) THEN
7640               fnd_message.set_name('AR', 'HZ_API_UNIQUE_ROLE_TYPE');
7641               fnd_msg_pub.add;
7642               x_return_status := fnd_api.g_ret_sts_error;
7643           END IF;
7644       EXCEPTION
7645           WHEN NO_DATA_FOUND THEN
7646               NULL;
7647       END;
7648 
7649       /*IF g_debug THEN
7650           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7651               'combination of org_contact_id and role_type must be unique. ' ||
7652               'x_return_status = ' || x_return_status, l_debug_prefix);
7653       END IF;
7654       */
7655       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7656            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7657            p_message=>'combination of org_contact_id and role_type must be unique. ' ||
7658               'x_return_status = ' || x_return_status,
7659                                   p_msg_level=>fnd_log.level_statement);
7660       END IF;
7661 
7662       -----------------------------------------
7663       -- validate primary_contact_per_role_type
7664       -----------------------------------------
7665 
7666       -- primary_contact_per_role_type is lookup code in lookup type YES/NO
7667       validate_lookup (
7668           p_column                                => 'primary_contact_per_role_type',
7669           p_lookup_type                           => 'YES/NO',
7670           p_column_value                          => p_org_contact_role_rec.primary_contact_per_role_type,
7671           x_return_status                         => x_return_status);
7672 
7673       /*IF g_debug THEN
7674           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7675               'primary_contact_per_role_type should be in lookup YES/NO. ' ||
7676               'x_return_status = ' || x_return_status, l_debug_prefix);
7677       END IF;
7678       */
7679       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7680            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7681            p_message=>'primary_contact_per_role_type should be in lookup YES/NO. ' ||
7682               'x_return_status = ' || x_return_status,
7683                                   p_msg_level=>fnd_log.level_statement);
7684     END IF;
7685 
7686       -- only one org contact can be set as primary within
7687       -- same organization party.
7688       IF p_org_contact_role_rec.primary_contact_per_role_type = 'Y' THEN
7689           BEGIN
7690               SELECT 'Y'
7691               INTO   l_dummy
7692               FROM   HZ_RELATIONSHIPS PR,
7693                      HZ_ORG_CONTACTS OC,
7694                      HZ_ORG_CONTACT_ROLES OCR,
7695                      HZ_RELATIONSHIPS PR2,
7696                      HZ_ORG_CONTACTS OC2
7697               WHERE  OCR.PRIMARY_CONTACT_PER_ROLE_TYPE = 'Y'
7698               AND    OCR.ROLE_TYPE = p_org_contact_role_rec.role_type
7699               AND    OCR.ORG_CONTACT_ID = OC.ORG_CONTACT_ID
7700               AND    OC.PARTY_RELATIONSHIP_ID = PR.RELATIONSHIP_ID
7701               AND    PR.OBJECT_ID = PR2.OBJECT_ID
7702               AND    PR2.RELATIONSHIP_ID = OC2.PARTY_RELATIONSHIP_ID
7703               AND    OC2.ORG_CONTACT_ID = P_ORG_CONTACT_ROLE_REC.ORG_CONTACT_ID
7704               AND    PR.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
7705               AND    PR.OBJECT_TABLE_NAME = 'HZ_PARTIES'
7706               AND    PR.DIRECTIONAL_FLAG = 'F'
7707               AND    PR2.SUBJECT_TABLE_NAME = 'HZ_PARTIES'
7708               AND    PR2.OBJECT_TABLE_NAME = 'HZ_PARTIES'
7709               AND    PR2.DIRECTIONAL_FLAG = 'F'
7710 	      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
7711 
7712               fnd_message.set_name('AR', 'HZ_API_UNIQUE_PRIMARY_ORG_CONT');
7713               fnd_msg_pub.add;
7714               x_return_status := fnd_api.g_ret_sts_error;
7715           EXCEPTION
7716               WHEN NO_DATA_FOUND THEN
7717                   NULL;
7718           END;
7719 
7720           /*IF g_debug THEN
7721               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7722                   'only one org contact can be set as primary within same organization party. ' ||
7723                   'x_return_status = ' || x_return_status, l_debug_prefix);
7724           END IF;
7725           */
7726           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7727                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7728                 p_message=>'only one org contact can be set as primary within same organization party. ' ||
7729                   'x_return_status = ' || x_return_status,
7730                                   p_msg_level=>fnd_log.level_statement);
7731           END IF;
7732 
7733       END IF;
7734 
7735       ------------------
7736       -- validate status
7737       ------------------
7738 /****Logical APIs - validation not required****/
7739   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7740       -- status is lookup code in lookup type REGISTRY_STATUS
7741       IF p_org_contact_role_rec.status IS NOT NULL
7742          AND
7743          p_org_contact_role_rec.status <> fnd_api.g_miss_char
7744          AND
7745          (p_create_update_flag = 'C'
7746           OR
7747           (p_create_update_flag = 'U'
7748            AND
7749            p_org_contact_role_rec.status <> NVL(l_status, fnd_api.g_miss_char)
7750          )
7751         )
7752       THEN
7753           validate_lookup (
7754               p_column                                => 'status',
7755               p_lookup_type                           => 'REGISTRY_STATUS',
7756               p_column_value                          => p_org_contact_role_rec.status,
7757               x_return_status                         => x_return_status);
7758 
7759           /*IF g_debug THEN
7760               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7761                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
7762                   'x_return_status = ' || x_return_status, l_debug_prefix);
7763           END IF;
7764           */
7765           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7766                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7767                 p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
7768                   'x_return_status = ' || x_return_status,
7769                                   p_msg_level=>fnd_log.level_statement);
7770          END IF;
7771 
7772       END IF;
7773   END IF;
7774 
7775       -- status cannot be set to null during update
7776       IF p_create_update_flag = 'U' THEN
7777           validate_cannot_update_to_null (
7778               p_column                                => 'status',
7779               p_column_value                          => p_org_contact_role_rec.status,
7780               x_return_status                         => x_return_status);
7781       END IF;
7782 
7783       --------------------------------------
7784       -- validate created_by_module
7785       --------------------------------------
7786 
7787       validate_created_by_module(
7788         p_create_update_flag     => p_create_update_flag,
7789         p_created_by_module      => p_org_contact_role_rec.created_by_module,
7790         p_old_created_by_module  => l_created_by_module,
7791         x_return_status          => x_return_status);
7792 
7793       --------------------------------------
7794       -- validate application_id
7795       --------------------------------------
7796 
7797       validate_application_id(
7798         p_create_update_flag     => p_create_update_flag,
7799         p_application_id         => p_org_contact_role_rec.application_id,
7800         p_old_application_id     => l_application_id,
7801         x_return_status          => x_return_status);
7802 
7803       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7804         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_org_contact_role (-)',
7805                                p_msg_level=>fnd_log.level_procedure);
7806       END IF;
7807 
7808   END validate_org_contact_role;
7809 
7810   /**
7811    * PROCEDURE validate_person_language
7812    *
7813    * DESCRIPTION
7814    *     Validates person language record. Checks for
7815    *         uniqueness
7816    *         lookup types
7817    *         mandatory columns
7818    *         non-updateable fields
7819    *         foreign key validations
7820    *         other validations
7821    *
7822    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
7823    *
7824    * ARGUMENTS
7825    *   IN:
7826    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
7827    *     p_person_language_rec          Person language record.
7828    *     p_rowid                        Rowid of the record (used only in update mode).
7829    *   IN/OUT:
7830    *     x_return_status                Return status after the call. The status can
7831    *                                    be FND_API.G_RET_STS_SUCCESS (success),
7832    *                                    fnd_api.g_ret_sts_error (error),
7833    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
7834    *
7835    * NOTES
7836    *
7837    * MODIFICATION HISTORY
7838    *
7839    *   07-23-2001    Indrajit Sen       o Created.
7840    *   01-10-2003    Porkodi Chinnandar o Added few lines to have validation for spoken_
7841    *                                      comprehension_level. The value entered for spoken_
7842    *                                      comprehension_level is validated against lookup type
7843    *                                      HZ_LANGUAGE_PROFICIENCY.
7844    *   18-03-2003    Porkodi Chinnandar o 2820135, Party should have only one native_languge and
7845    *                                      one primary language. This check has been moved to
7846    *                                      ARH2PISB due to the update involved in this.
7847    *   01-MAR-2004   Rajib Ranjan Borah o Bug 3363458.Modified previous validation to ensure
7848    *                                      that the primary language cannot be inactive.
7849    *                                      Added local variable l_primary_language_indicator
7850    *                                      for the same.
7851    *   03-May-3004 Venkata Sowjanya S     Bug No : 3609601. Commented the statements which sets tokens Column1,Column2
7852    *                                        for message HZ_API_INACTIVE_CANNOT_PRIM
7853    */
7854 
7855   PROCEDURE validate_person_language(
7856       p_create_update_flag                    IN      VARCHAR2,
7857       p_person_language_rec                   IN      HZ_PERSON_INFO_V2PUB.PERSON_LANGUAGE_REC_TYPE,
7858       p_rowid                                 IN      ROWID ,
7859       x_return_status                         IN OUT NOCOPY  VARCHAR2
7860  ) IS
7861 
7862       l_count                                          NUMBER;
7863       l_dummy                                          VARCHAR2(1);
7864       l_party_id                                       NUMBER := p_person_language_rec.party_id;
7865       l_created_by_module                              VARCHAR2(150);
7866       l_application_id                                 NUMBER;
7867       l_language_name                                  VARCHAR2(4);
7868       l_status                                         VARCHAR2(1);
7869       l_debug_prefix                                   VARCHAR2(30) := '';
7870       l_primary_language_indicator                     VARCHAR2(1);
7871 
7872   BEGIN
7873 
7874       --enable_debug;
7875 
7876       -- Debug info.
7877       /*IF g_debug THEN
7878           hz_utility_v2pub.debug ('validate_person_language (+)');
7879       END IF;
7880       */
7881       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
7882         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_person_language (+)',
7883                                p_msg_level=>fnd_log.level_procedure);
7884       END IF;
7885 
7886       -- do the query to get old values for update
7887       IF p_create_update_flag = 'U'
7888       THEN
7889           SELECT PARTY_ID,
7890                  LANGUAGE_NAME,
7891                  STATUS,
7892                  CREATED_BY_MODULE,
7893                  APPLICATION_ID,
7894                  PRIMARY_LANGUAGE_INDICATOR
7895           INTO   l_party_id,
7896                  l_language_name,
7897                  l_status,
7898                  l_created_by_module,
7899                  l_application_id,
7900                  l_primary_language_indicator
7901           FROM   HZ_PERSON_LANGUAGE
7902           WHERE  ROWID = p_rowid;
7903       END IF;
7904 
7905       --------------------------
7906       -- validation for party_id
7907       --------------------------
7908 /****Logical APIs - validation not required****/
7909   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
7910       -- party_id is mandatory field
7911       IF p_create_update_flag = 'C' THEN
7912           validate_mandatory (
7913               p_create_update_flag                    => p_create_update_flag,
7914               p_column                                => 'party_id',
7915               p_column_value                          => p_person_language_rec.party_id,
7916               x_return_status                         => x_return_status);
7917 
7918           /*IF g_debug THEN
7919               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7920                   'party_id is mandatory field. ' ||
7921                   'x_return_status = ' || x_return_status, l_debug_prefix);
7922           END IF;
7923           */
7924           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7925                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
7926                   'x_return_status = ' || x_return_status,
7927                                   p_msg_level=>fnd_log.level_statement);
7928           END IF;
7929 
7930       END IF;
7931 
7932       -- party_id is non-updateable field
7933       IF p_create_update_flag = 'U' THEN
7934           validate_nonupdateable (
7935               p_column                                => 'party_id',
7936               p_column_value                          => p_person_language_rec.party_id,
7937               p_old_column_value                      => l_party_id,
7938               x_return_status                         => x_return_status);
7939 
7940           /*IF g_debug THEN
7941               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7942                   'party_id is non-updateable field. ' ||
7943                   'x_return_status = ' || x_return_status, l_debug_prefix);
7944           END IF;
7945           */
7946           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7947                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
7948                   'x_return_status = ' || x_return_status,
7949                                   p_msg_level=>fnd_log.level_statement);
7950           END IF;
7951 
7952       END IF;
7953 
7954       -- party_id has foreign key HZ_PARTIES.PARTY_ID
7955       IF p_create_update_flag = 'C'
7956          AND
7957          p_person_language_rec.party_id IS NOT NULL
7958          AND
7959          p_person_language_rec.party_id <> fnd_api.g_miss_num
7960       THEN
7961           BEGIN
7962               SELECT 'Y'
7963               INTO   l_dummy
7964               FROM   hz_parties
7965               WHERE  party_id = p_person_language_rec.party_id;
7966 
7967           EXCEPTION
7968               WHEN NO_DATA_FOUND THEN
7969                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
7970                   fnd_message.set_token('FK', 'party_id');
7971                   fnd_message.set_token('COLUMN', 'party_id');
7972                   fnd_message.set_token('TABLE', 'hz_parties');
7973                   fnd_msg_pub.add;
7974                   x_return_status := fnd_api.g_ret_sts_error;
7975           END;
7976 
7977           /*IF g_debug THEN
7978               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
7979                   'party_id has foreign key hz_parties.party_id. ' ||
7980                   'x_return_status = ' || x_return_status, l_debug_prefix);
7981           END IF;
7982           */
7983           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
7984              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
7985                   'x_return_status = ' || x_return_status,
7986                                   p_msg_level=>fnd_log.level_statement);
7987           END IF;
7988 
7989       END IF;
7990   END IF;
7991 
7992       -------------------------------
7993       -- validation for language_name
7994       -------------------------------
7995 
7996       -- language_name is mandatory field
7997       IF p_create_update_flag = 'C' THEN
7998           validate_mandatory (
7999               p_create_update_flag                    => p_create_update_flag,
8000               p_column                                => 'language_name',
8001               p_column_value                          => p_person_language_rec.language_name,
8002               x_return_status                         => x_return_status);
8003 
8004           /*IF g_debug THEN
8005               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8006                   'language_name is mandatory field. ' ||
8007                   'x_return_status = ' || x_return_status, l_debug_prefix);
8008           END IF;
8009           */
8010           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8011                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'language_name is mandatory field. ' ||
8012                   'x_return_status = ' || x_return_status,
8013                                   p_msg_level=>fnd_log.level_statement);
8014           END IF;
8015 
8016       END IF;
8017 
8018       -- language_name is non-updateable field
8019       IF p_create_update_flag = 'U' THEN
8020           validate_nonupdateable (
8021               p_column                                => 'language_name',
8022               p_column_value                          => p_person_language_rec.language_name,
8023               p_old_column_value                      => l_language_name,
8024               x_return_status                         => x_return_status);
8025 
8026           /*IF g_debug THEN
8027               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8028                   'language_name is non-updateable field. ' ||
8029                   'x_return_status = ' || x_return_status, l_debug_prefix);
8030           END IF;
8031           */
8032           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8033             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'language_name is non-updateable field. ' ||
8034                   'x_return_status = ' || x_return_status,
8035                                   p_msg_level=>fnd_log.level_statement);
8036           END IF;
8037 
8038       END IF;
8039 
8040       -- language_name has foreign key fnd_languages.language_code
8041       IF p_person_language_rec.language_name IS NOT NULL
8042          AND
8043          p_person_language_rec.language_name <> fnd_api.g_miss_char
8044       THEN
8045           BEGIN
8046               SELECT 'Y'
8047               INTO   l_dummy
8048               FROM   FND_LANGUAGES
8049               WHERE  LANGUAGE_CODE = p_person_language_rec.language_name;
8050           EXCEPTION
8051               WHEN NO_DATA_FOUND THEN
8052                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
8053                   fnd_message.set_token('FK', 'language_name');
8054                   fnd_message.set_token('COLUMN', 'language_code');
8055                   fnd_message.set_token('TABLE', 'fnd_languages');
8056                   fnd_msg_pub.add;
8057                   x_return_status := fnd_api.g_ret_sts_error;
8058           END;
8059 
8060           /*IF g_debug THEN
8061               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8062                   'language_name has foreign key fnd_languages.language_code. ' ||
8063                   'x_return_status = ' || x_return_status, l_debug_prefix);
8064           END IF;
8065           */
8066           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8067             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8068             p_message=>'language_name has foreign key fnd_languages.language_code. ' ||
8069                   'x_return_status = ' || x_return_status,
8070                                   p_msg_level=>fnd_log.level_statement);
8071           END IF;
8072 
8073       END IF;
8074 
8075       -- there can be only one record for a given party and language
8076       BEGIN
8077           SELECT 1
8078           INTO   l_dummy
8079           FROM   HZ_PERSON_LANGUAGE
8080           WHERE  PARTY_ID = l_party_id
8081           AND    LANGUAGE_NAME = p_person_language_rec.language_name
8082           AND    LANGUAGE_USE_REFERENCE_ID <> NVL(p_person_language_rec.language_use_reference_id, fnd_api.g_miss_num);
8083 
8084           fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
8085           fnd_message.set_token('COLUMN', 'language_name');
8086           fnd_msg_pub.add;
8087           x_return_status := fnd_api.g_ret_sts_error;
8088 
8089       EXCEPTION
8090           WHEN NO_DATA_FOUND THEN
8091               NULL;
8092       END;
8093 
8094       ---------------------------------
8095       -- validation for native_language
8096       ---------------------------------
8097 /****Logical APIs - validation not required****/
8098   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8099       -- native_language is lookup code in lookup type YES/NO
8100       validate_lookup (
8101           p_column                                => 'native_language',
8102           p_lookup_type                           => 'YES/NO',
8103           p_column_value                          => p_person_language_rec.native_language,
8104           x_return_status                         => x_return_status);
8105 
8106       /*IF g_debug THEN
8107           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8108               'native_language should be in lookup YES/NO. ' ||
8109               'x_return_status = ' || x_return_status, l_debug_prefix);
8110       END IF;
8111       */
8112       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8113            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'native_language should be in lookup YES/NO. ' ||
8114               'x_return_status = ' || x_return_status,
8115                                   p_msg_level=>fnd_log.level_statement);
8116       END IF;
8117   END IF;
8118 
8119       --------------------------------------------
8120       -- validation for spoken_comprehension_level
8121       --------------------------------------------
8122 
8123       -- spoken_comprehension_level is lookup code in lookup type HZ_LANGUAGE_PROFICIENCY
8124       validate_lookup (
8125           p_column                                => 'spoken_comprehension_level',
8126           p_lookup_type                           => 'HZ_LANGUAGE_PROFICIENCY',
8127           p_column_value                          => p_person_language_rec.spoken_comprehension_level,
8128           x_return_status                         => x_return_status);
8129 
8130 
8131       /*IF g_debug THEN
8132           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8133               'spoken_comprehension_level should be in lookup HZ_LANGUAGE_PROFICIENCY. ' ||
8134               'x_return_status = ' || x_return_status, l_debug_prefix);
8135       END IF;
8136       */
8137       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8138            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8139            p_message=>'spoken_comprehension_level should be in lookup HZ_LANGUAGE_PROFICIENCY. ' ||
8140               'x_return_status = ' || x_return_status,
8141                                   p_msg_level=>fnd_log.level_statement);
8142       END IF;
8143 
8144 
8145       --------------------------------------------
8146       -- validation for primary_language_indicator
8147       --------------------------------------------
8148 /****Logical APIs - validation not required****/
8149   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8150       -- primary_language_indicator is lookup code in lookup type YES/NO
8151       validate_lookup (
8152           p_column                                => 'primary_language_indicator',
8153           p_lookup_type                           => 'YES/NO',
8154           p_column_value                          => p_person_language_rec.primary_language_indicator,
8155           x_return_status                         => x_return_status);
8156 
8157       /*IF g_debug THEN
8158           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8159               'primary_language_indicator should be in lookup YES/NO. ' ||
8160               'x_return_status = ' || x_return_status, l_debug_prefix);
8161       END IF;
8162       */
8163       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8164            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8165            p_message=>'primary_language_indicator should be in lookup YES/NO. ' ||
8166               'x_return_status = ' || x_return_status,
8167                                   p_msg_level=>fnd_log.level_statement);
8168       END IF;
8169   END IF;
8170 
8171       ------------------------
8172       -- validation for status
8173       ------------------------
8174 /****Logical APIs - validation not required****/
8175   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8176       -- status is lookup code in lookup type REGISTRY_STATUS
8177       IF p_person_language_rec.status IS NOT NULL
8178          AND
8179          p_person_language_rec.status <> fnd_api.g_miss_char
8180          AND
8181          (p_create_update_flag = 'C'
8182           OR
8183           (p_create_update_flag = 'U'
8184            AND
8185            p_person_language_rec.status <> NVL(l_status, fnd_api.g_miss_char)
8186          )
8187         )
8188       THEN
8189           validate_lookup (
8190               p_column                                => 'status',
8191               p_lookup_type                           => 'REGISTRY_STATUS',
8192               p_column_value                          => p_person_language_rec.status,
8193               x_return_status                         => x_return_status);
8194 
8195           /*IF g_debug THEN
8196               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8197                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
8198                   'x_return_status = ' || x_return_status, l_debug_prefix);
8199           END IF;
8200           */
8201           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8202             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8203             p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
8204                   'x_return_status = ' || x_return_status,
8205                                   p_msg_level=>fnd_log.level_statement);
8206           END IF;
8207 
8208       END IF;
8209   END IF;
8210 
8211       -- status cannot be set to null during update
8212       IF p_create_update_flag = 'U' THEN
8213           validate_cannot_update_to_null (
8214               p_column                                => 'status',
8215               p_column_value                          => p_person_language_rec.status,
8216               x_return_status                         => x_return_status);
8217       END IF;
8218 
8219 
8220       -- 2820135, the following check has been made as part of this bug
8221       -- If the primary_language_indicator is set to Yes, the status column should
8222       -- not be Inactive
8223 
8224       -- Bug 3363458.The previous validation did not take care of the condition when
8225       -- the status for a primary language was updated from 'A' to 'I'.
8226 
8227 /*
8228       IF p_person_language_rec.primary_language_indicator is NOT NULL
8229          AND p_person_language_rec.primary_language_indicator <> fnd_api.g_miss_char
8230          AND (p_create_update_flag = 'C'
8231               OR (p_create_update_flag = 'U'
8232                   AND p_person_language_rec.primary_language_indicator <>
8233                     NVL(l_primary_language_indicator, fnd_api.g_miss_char)))
8234       THEN
8235         SELECT DECODE(p_person_language_rec.primary_language_indicator,
8236                       'Y', DECODE(p_person_language_rec.status,
8237                                   'I', 'N',
8238                                   '', DECODE(l_status, 'I', 'N')),
8239                       'Y')
8240         INTO   l_dummy
8241         FROM   dual;
8242 
8243         IF l_dummy <> 'Y' THEN
8244         fnd_message.set_name('AR', 'HZ_API_INACTIVE_CANNOT_PRIM');
8245         fnd_message.set_token('ENTITY', 'language');
8246        -- fnd_message.set_token('COLUMN1', 'primary_language_indicator');
8247        -- fnd_message.set_token('COLUMN2', 'status');
8248         fnd_msg_pub.add;
8249         x_return_status := FND_API.G_RET_STS_ERROR;
8250         END IF;
8251 
8252         */
8253 
8254         -- Bug 3363458.
8255         IF p_create_update_flag = 'C'
8256         THEN
8257             IF (p_person_language_rec.primary_language_indicator = 'Y'
8258                AND p_person_language_rec.status = 'I')
8259             THEN
8260                 fnd_message.set_name('AR', 'HZ_API_INACTIVE_CANNOT_PRIM');
8261                 fnd_message.set_token('ENTITY', 'Language');
8262         --        fnd_message.set_token('COLUMN1', 'primary_language_indicator');
8263         --        fnd_message.set_token('COLUMN2', 'status');
8264                 fnd_msg_pub.add;
8265                 x_return_status := FND_API.G_RET_STS_ERROR;
8266 
8267                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8268                     hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8269                     p_message=>'If the primary_language_indicator is set to Yes, the status column should not be Inactive.' ||
8270                     'x_return_status = ' || x_return_status,
8271                     p_msg_level=>fnd_log.level_statement);
8272                 END IF;
8273 
8274             END IF;
8275         ELSE  -- p_create_update_flag = 'U'
8276             IF (NVL(p_person_language_rec.primary_language_indicator,l_primary_language_indicator)='Y'
8277                AND NVL(p_person_language_rec.status,l_status)='I')
8278             THEN
8279                 fnd_message.set_name('AR', 'HZ_API_INACTIVE_CANNOT_PRIM');
8280                 fnd_message.set_token('ENTITY', 'Language');
8281                 --fnd_message.set_token('COLUMN1', 'primary_language_indicator');
8282                -- fnd_message.set_token('COLUMN2', 'status');
8283                 fnd_msg_pub.add;
8284                 x_return_status := FND_API.G_RET_STS_ERROR;
8285 
8286                 IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8287                     hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8288                     p_message=>'If the primary_language_indicator is set to Yes, the status column should not be Inactive.' ||
8289                     'x_return_status = ' || x_return_status,
8290                     p_msg_level=>fnd_log.level_statement);
8291                 END IF;
8292 
8293             END IF;
8294         END IF;  -- corresponding to IF p_create_update_flag = 'C'
8295 
8296        /*IF g_debug THEN
8297           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8298             'If the primary_language_indicator is set to Yes, the status column should not be Inactive.' ||
8299             'x_return_status = ' || x_return_status,
8300             l_debug_prefix
8301           );
8302         END IF;
8303         */
8304 
8305       --------------------------------------
8306       -- validate created_by_module
8307       --------------------------------------
8308 
8309       validate_created_by_module(
8310         p_create_update_flag     => p_create_update_flag,
8311         p_created_by_module      => p_person_language_rec.created_by_module,
8312         p_old_created_by_module  => l_created_by_module,
8313         x_return_status          => x_return_status);
8314 
8315       --------------------------------------
8316       -- validate application_id
8317       --------------------------------------
8318 
8319       validate_application_id(
8320         p_create_update_flag     => p_create_update_flag,
8321         p_application_id         => p_person_language_rec.application_id,
8322         p_old_application_id     => l_application_id,
8323         x_return_status          => x_return_status);
8324 
8325       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
8326         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_person_language (-)',
8327                                p_msg_level=>fnd_log.level_procedure);
8328       END IF;
8329 
8330   END validate_person_language;
8331 
8332 
8333   /**
8334    * PROCEDURE validate_citizenship
8335    *
8336    * DESCRIPTION
8337    *     Validates citizenship record. Checks for
8338    *         uniqueness
8339    *         lookup types
8340    *         mandatory columns
8341    *         non-updateable fields
8342    *         foreign key validations
8343    *         other validations
8344    *
8345    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
8346    *
8347    * ARGUMENTS
8348    *   IN:
8349    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
8350    *     p_citizenship_rec              Citizenship record.
8351    *     p_rowid                        Rowid of the record (used only in update mode).
8352    *   IN/OUT:
8353    *     x_return_status                Return status after the call. The status can
8354    *                                    be FND_API.G_RET_STS_SUCCESS (success),
8355    *                                    fnd_api.g_ret_sts_error (error),
8356    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
8357    *
8358    * NOTES
8359    *
8360    * MODIFICATION HISTORY
8361    *
8362    *   31-Jan-2001    Porkodi C         o Created.
8363    *   10-Mar-2003    Porkodi C         o Bug 2820483, Added mandatory check for country_code
8364    *                                      Bug 2820462, Added the party_type check for the party_id
8365    *
8366    */
8367 
8368     PROCEDURE validate_citizenship(
8369         p_create_update_flag                    IN      VARCHAR2,
8370         p_citizenship_rec                       IN      HZ_PERSON_INFO_V2PUB.CITIZENSHIP_REC_TYPE,
8371         p_rowid                                 IN      ROWID ,
8372         x_return_status                         IN OUT NOCOPY  VARCHAR2
8373    ) IS
8374 
8375         l_count                                          NUMBER;
8376         l_dummy                                          VARCHAR2(1);
8377         l_party_id                                       NUMBER := p_citizenship_rec.party_id;
8378         l_created_by_module                              VARCHAR2(150);
8379         l_application_id                                 NUMBER;
8380         l_citizenship_id                                 NUMBER;
8381         l_status                                         VARCHAR2(1);
8382         l_debug_prefix                                   VARCHAR2(30) := '';
8383 
8384 
8385         CURSOR citizen_cur (p_citizenship_id IN NUMBER) IS
8386               SELECT 'Y'
8387               FROM   hz_citizenship hc
8388         WHERE  hc.citizenship_id = p_citizenship_id;
8389 
8390 
8391     BEGIN
8392 
8393         --enable_debug;
8394 
8395         -- Debug info.
8396         /*IF g_debug THEN
8397             hz_utility_v2pub.debug ('validate_citizenship (+)');
8398         END IF;
8399         */
8400         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
8401                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_citizenship (+)',
8402                                p_msg_level=>fnd_log.level_procedure);
8403         END IF;
8404 
8405         -- do the query to get old values for update
8406         IF p_create_update_flag = 'U'
8407         THEN
8408             SELECT CITIZENSHIP_ID,
8409                    PARTY_ID,
8410                    STATUS,
8411                    CREATED_BY_MODULE,
8412                    APPLICATION_ID
8413             INTO   l_citizenship_id,
8414                    l_party_id,
8415                    l_status,
8416                    l_created_by_module,
8417                    l_application_id
8418             FROM   HZ_CITIZENSHIP
8419             WHERE  ROWID = p_rowid;
8420         END IF;
8421 
8422 
8423         --------------------------------------
8424         -- validate citizenship_id
8425         --------------------------------------
8426 /****Logical APIs - validation not required****/
8427   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8428         -- If primary key value is passed, check for uniqueness.
8429         -- If primary key value is not passed, it will be generated
8430         -- from sequence by table handler.
8431 
8432         IF p_create_update_flag = 'C' THEN
8433         IF p_citizenship_rec.citizenship_id IS NOT NULL AND
8434            p_citizenship_rec.citizenship_id <> fnd_api.g_miss_num
8435         THEN
8436         OPEN citizen_cur (p_citizenship_rec.citizenship_id);
8437         FETCH citizen_cur INTO l_dummy;
8438 
8439         -- key is not unique, push an error onto the stack.
8440         IF NVL(citizen_cur%FOUND, FALSE) THEN
8441           fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
8442           fnd_message.set_token('COLUMN', 'citizenship_id');
8443           fnd_msg_pub.add;
8444           x_return_status := fnd_api.g_ret_sts_error;
8445         END IF;
8446         CLOSE citizen_cur;
8447 
8448         /*IF g_debug THEN
8449           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8450             'check that citizenship_id is unique during creation. ' ||
8451             ' x_return_status = ' || x_return_status, l_debug_prefix);
8452         END IF;
8453         */
8454         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8455            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8456            p_message=>'check that citizenship_id is unique during creation. ' ||
8457             ' x_return_status = ' || x_return_status,
8458                                   p_msg_level=>fnd_log.level_statement);
8459         END IF;
8460 
8461         END IF;
8462         END IF;
8463 
8464         /*IF g_debug THEN
8465         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8466         '(+) after validate citizenship_id ... ' ||
8467         'x_return_status = ' || x_return_status, l_debug_prefix);
8468         END IF;
8469         */
8470         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8471            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate citizenship_id ... ' ||
8472                                                 'x_return_status = ' || x_return_status,
8473                                   p_msg_level=>fnd_log.level_statement);
8474         END IF;
8475 
8476 
8477         -- citizenship_id is non-updateable field
8478            IF p_create_update_flag = 'U' THEN
8479               validate_nonupdateable (
8480                   p_column                                => 'citizenship_id',
8481                   p_column_value                          => p_citizenship_rec.citizenship_id,
8482                   p_old_column_value                      => l_citizenship_id,
8483                   x_return_status                         => x_return_status);
8484 
8485               /*IF g_debug THEN
8486                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8487                     'citizenship_id is non-updateable field. ' ||
8488                     'x_return_status = ' || x_return_status, l_debug_prefix);
8489               END IF;
8490               */
8491               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8492                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'citizenship_id is non-updateable field. ' ||
8493                     'x_return_status = ' || x_return_status,
8494                                   p_msg_level=>fnd_log.level_statement);
8495               END IF;
8496 
8497 
8498            END IF;
8499   END IF;
8500 
8501         --------------------------
8502         -- validation for party_id
8503         --------------------------
8504 /****Logical APIs - validation not required****/
8505   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8506         -- party_id is mandatory field
8507         IF p_create_update_flag = 'C' THEN
8508             validate_mandatory (
8509                 p_create_update_flag                    => p_create_update_flag,
8510                 p_column                                => 'party_id',
8511                 p_column_value                          => p_citizenship_rec.party_id,
8512                 x_return_status                         => x_return_status);
8513 
8514             /*IF g_debug THEN
8515                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8516                     'party_id is mandatory field. ' ||
8517                     'x_return_status = ' || x_return_status, l_debug_prefix);
8518             END IF;
8519             */
8520             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8521                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
8522                     'x_return_status = ' || x_return_status,
8523                                   p_msg_level=>fnd_log.level_statement);
8524             END IF;
8525 
8526 
8527         END IF;
8528 
8529         -- party_id is non-updateable field
8530         IF p_create_update_flag = 'U' THEN
8531             validate_nonupdateable (
8532                 p_column                                => 'party_id',
8533                 p_column_value                          => p_citizenship_rec.party_id,
8534                 p_old_column_value                      => l_party_id,
8535                 x_return_status                         => x_return_status);
8536 
8537             /*IF g_debug THEN
8538                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8539                     'party_id is non-updateable field. ' ||
8540                     'x_return_status = ' || x_return_status, l_debug_prefix);
8541             END IF;
8542             */
8543             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8544                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
8545                     'x_return_status = ' || x_return_status,
8546                                   p_msg_level=>fnd_log.level_statement);
8547             END IF;
8548 
8549 
8550         END IF;
8551 
8552         -- 2820462, Party_type check has been added to the where clause
8553         -- party_id has foreign key HZ_PARTIES.PARTY_ID
8554         IF p_create_update_flag = 'C'
8555            AND
8556            p_citizenship_rec.party_id IS NOT NULL
8557            AND
8558            p_citizenship_rec.party_id <> fnd_api.g_miss_num
8559         THEN
8560             BEGIN
8561                 SELECT 'Y'
8562                 INTO   l_dummy
8563                 FROM   hz_parties p
8564                 WHERE  p.party_type='PERSON' and
8565                 p.party_id = p_citizenship_rec.party_id;
8566 
8567             EXCEPTION
8568                 WHEN NO_DATA_FOUND THEN
8569                     fnd_message.set_name('AR', 'HZ_API_PARTY_NOT_PERSON');
8570           --          fnd_message.set_token('FK', 'party_id');
8571                     fnd_message.set_token('TABLE_NAME', 'HZ_CITIZENSHIP');
8572                     fnd_message.set_token('PARTY_ID_COL', 'party_id');
8573                     fnd_msg_pub.add;
8574                     x_return_status := fnd_api.g_ret_sts_error;
8575             END;
8576 
8577             /*IF g_debug THEN
8578                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8579                     'party_id has foreign key hz_parties.party_id. ' ||
8580                     'x_return_status = ' || x_return_status, l_debug_prefix);
8581             END IF;
8582             */
8583             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8584                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
8585                     'x_return_status = ' || x_return_status,
8586                                   p_msg_level=>fnd_log.level_statement);
8587             END IF;
8588 
8589 
8590         END IF;
8591   END IF;
8592 
8593         ---------------------------------------
8594         -- validation for birth_or_selected
8595         ---------------------------------------
8596 
8597         -- birth_or_selected is lookup code in lookup type HZ_CITIZENSHIP_ACQUISITION
8598 
8599         validate_lookup (
8600             p_column                                => 'birth_or_selected',
8601             p_lookup_type                           => 'HZ_CITIZENSHIP_ACQUISITION',
8602             p_column_value                          => p_citizenship_rec.birth_or_selected,
8603             x_return_status                         => x_return_status);
8604 
8605 
8606         /*IF g_debug THEN
8607             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8608                 'birth_or_selected should be in lookup HZ_CITIZENSHIP_ACQUISITION. ' ||
8609                 'x_return_status = ' || x_return_status, l_debug_prefix);
8610         END IF;
8611         */
8612         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8613            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8614            p_message=>'birth_or_selected should be in lookup HZ_CITIZENSHIP_ACQUISITION. ' ||
8615                 'x_return_status = ' || x_return_status,
8616                                   p_msg_level=>fnd_log.level_statement);
8617         END IF;
8618 
8619 
8620         ---------------------------------------
8621         -- validation for country_code
8622         ---------------------------------------
8623 
8624         -- 2820483, Added the mandatory check
8625         -- country_code is mandatory field
8626         IF p_create_update_flag = 'C' THEN
8627             validate_mandatory (
8628                 p_create_update_flag                    => p_create_update_flag,
8629                 p_column                                => 'country_code',
8630                 p_column_value                          => p_citizenship_rec.country_code,
8631                 x_return_status                         => x_return_status);
8632 
8633             /*IF g_debug THEN
8634                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8635                     'country_code is mandatory field. ' ||
8636                     'x_return_status = ' || x_return_status, l_debug_prefix);
8637             END IF;
8638             */
8639             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8640                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8641                  p_message=>'country_code is mandatory field. ' ||
8642                     'x_return_status = ' || x_return_status,
8643                                   p_msg_level=>fnd_log.level_statement);
8644             END IF;
8645 
8646 
8647         END IF;
8648 
8649         -- country has foreign key fnd_territories.territory_code
8650         validate_country_code(
8651             p_column              => 'country_code',
8652             p_column_value        => p_citizenship_rec.country_code,
8653             x_return_status       => x_return_status);
8654 
8655         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
8656             hz_utility_v2pub.debug(
8657               p_prefix            => l_debug_prefix,
8658               p_message           => 'country_code should be in fnd_territories.territory_code. ' ||
8659                                      'x_return_status = ' || x_return_status,
8660               p_msg_level         => fnd_log.level_statement);
8661         END IF;
8662 
8663         -- 2820483, Added the following check also
8664         -- country_code cannot be set to null during update
8665         IF p_create_update_flag = 'U' THEN
8666             validate_cannot_update_to_null (
8667                 p_column                                => 'country_code',
8668                 p_column_value                          => p_citizenship_rec.country_code,
8669                 x_return_status                         => x_return_status);
8670         END IF;
8671 
8672 
8673         ------------------------
8674         -- validation for status
8675         ------------------------
8676 /****Logical APIs - validation not required****/
8677   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8678         -- status is lookup code in lookup type REGISTRY_STATUS
8679         IF p_citizenship_rec.status IS NOT NULL
8680            AND
8681            p_citizenship_rec.status <> fnd_api.g_miss_char
8682            AND
8683            (p_create_update_flag = 'C'
8684             OR
8685             (p_create_update_flag = 'U'
8686              AND
8687              p_citizenship_rec.status <> NVL(l_status, fnd_api.g_miss_char)
8688            )
8689           )
8690         THEN
8691             validate_lookup (
8692                 p_column                                => 'status',
8693                 p_lookup_type                           => 'REGISTRY_STATUS',
8694                 p_column_value                          => p_citizenship_rec.status,
8695                 x_return_status                         => x_return_status);
8696 
8697             /*IF g_debug THEN
8698                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8699                     'status is lookup code in lookup type REGISTRY_STATUS. ' ||
8700                     'x_return_status = ' || x_return_status, l_debug_prefix);
8701             END IF;
8702             */
8703             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8704                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8705                 p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
8706                     'x_return_status = ' || x_return_status,
8707                                   p_msg_level=>fnd_log.level_statement);
8708             END IF;
8709 
8710 
8711         END IF;
8712   END IF;
8713 
8714         -- status cannot be set to null during update
8715         IF p_create_update_flag = 'U' THEN
8716             validate_cannot_update_to_null (
8717                 p_column                                => 'status',
8718                 p_column_value                          => p_citizenship_rec.status,
8719                 x_return_status                         => x_return_status);
8720         END IF;
8721 
8722         --------------------------------------
8723         -- validate created_by_module
8724         --------------------------------------
8725 
8726         validate_created_by_module(
8727           p_create_update_flag     => p_create_update_flag,
8728           p_created_by_module      => p_citizenship_rec.created_by_module,
8729           p_old_created_by_module  => l_created_by_module,
8730           x_return_status          => x_return_status);
8731 
8732         --------------------------------------
8733         -- validate application_id
8734         --------------------------------------
8735 
8736         validate_application_id(
8737           p_create_update_flag     => p_create_update_flag,
8738           p_application_id         => p_citizenship_rec.application_id,
8739           p_old_application_id     => l_application_id,
8740           x_return_status          => x_return_status);
8741 
8742         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
8743                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_citizenship (-)',
8744                                p_msg_level=>fnd_log.level_procedure);
8745         END IF;
8746 
8747   END validate_citizenship;
8748 
8749 
8750   /**
8751    * PROCEDURE validate_education
8752    *
8753    * DESCRIPTION
8754    *     Validates education record. Checks for
8755    *         uniqueness
8756    *         lookup types
8757    *         mandatory columns
8758    *         non-updateable fields
8759    *         foreign key validations
8760    *         other validations
8761    *
8762    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
8763    *
8764    * ARGUMENTS
8765    *   IN:
8766    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
8767    *     p_education_rec                Education record.
8768    *     p_rowid                        Rowid of the record (used only in update mode).
8769    *   IN/OUT:
8770    *     x_return_status                Return status after the call. The status can
8771    *                                    be FND_API.G_RET_STS_SUCCESS (success),
8772    *                                    fnd_api.g_ret_sts_error (error),
8773    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
8774    *
8775    * NOTES
8776    *
8777    * MODIFICATION HISTORY
8778    *
8779    *   31-Jan-2001    Porkodi C         o Created.
8780    *   11-Mar-2003    Porkodi C         o 2820602: Changed the error message, when wrong
8781    *                                      party_type has been passed to the user.
8782    *   07-Apr-2003    Porkodi C         o 2888486: On update mutual exclusivity between
8783    *                                      school_party_id and school_attended_name was not
8784    *                                      been maintained.
8785    *   09-Apr-2003    Porkodi C         o 2888399: validation for start_date_attended and last_date_attended
8786    *                                      has been modified
8787    *   17-Feb-2004    Rajib Ranjan B    o Bug 3425871.Type_of_school will be validated only
8788    *                                      if the column value changes.
8789    */
8790 
8791     PROCEDURE validate_education(
8792         p_create_update_flag                    IN      VARCHAR2,
8793         p_education_rec                         IN      HZ_PERSON_INFO_V2PUB.EDUCATION_REC_TYPE,
8794         p_rowid                                 IN      ROWID ,
8795         x_return_status                         IN OUT NOCOPY  VARCHAR2
8796    ) IS
8797 
8798         l_count                                          NUMBER;
8799         l_education_id                                   NUMBER;
8800         l_dummy                                          VARCHAR2(1);
8801         l_party_id                                       NUMBER := p_education_rec.party_id;
8802         l_created_by_module                              VARCHAR2(30);
8803         l_application_id                                 NUMBER;
8804         l_status                                         VARCHAR2(1);
8805         l_debug_prefix                                   VARCHAR2(30) := '';
8806         l_start_date_attended                            DATE;
8807         l_last_date_attended                             DATE;
8808         l_school_party_id                                NUMBER;
8809         l_school_attended_name                           VARCHAR2(60);
8810         -- Code modified for Bug 3473418 starts here
8811         l_type_of_school                                 VARCHAR2(30);
8812         -- Code modified for Bug 3473418 ends here
8813         temp_school_party_id                             NUMBER;
8814         temp_school_attended_name                        VARCHAR2(60);
8815         temp_start_date_attended                         DATE;
8816         temp_last_date_attended                          DATE;
8817 
8818         CURSOR education_cur (p_education_id IN NUMBER) IS
8819               SELECT 'Y'
8820               FROM   hz_education hc
8821         WHERE  hc.education_id = p_education_id;
8822 
8823     BEGIN
8824 
8825         --enable_debug;
8826 
8827         -- Debug info.
8828         /*IF g_debug THEN
8829             hz_utility_v2pub.debug ('validate_education (+)');
8830         END IF;
8831         */
8832         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
8833                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_education (+)',
8834                                p_msg_level=>fnd_log.level_procedure);
8835         END IF;
8836 
8837 
8838         -- do the query to get old values for update
8839         IF p_create_update_flag = 'U'
8840         THEN
8841             SELECT EDUCATION_ID,
8842                    PARTY_ID,
8843                    START_DATE_ATTENDED,
8844                    LAST_DATE_ATTENDED,
8845                    STATUS,
8846                    CREATED_BY_MODULE,
8847                    APPLICATION_ID,
8848                    SCHOOL_PARTY_ID,
8849                    SCHOOL_ATTENDED_NAME,
8850                    TYPE_OF_SCHOOL
8851             INTO   l_education_id,
8852                    l_party_id,
8853                    l_start_date_attended,
8854                    l_last_date_attended,
8855                    l_status,
8856                    l_created_by_module,
8857                    l_application_id,
8858                    l_school_party_id,
8859                    l_school_attended_name,
8860                    l_type_of_school
8861             FROM   HZ_EDUCATION
8862             WHERE  ROWID = p_rowid;
8863         END IF;
8864 
8865 
8866         --------------------------------------
8867         -- validate education_id
8868         --------------------------------------
8869 /****Logical APIs - validation not required****/
8870   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8871         -- If primary key value is passed, check for uniqueness.
8872         -- If primary key value is not passed, it will be generated
8873         -- from sequence by table handler.
8874 
8875 
8876         IF p_create_update_flag = 'C' THEN
8877            IF p_education_rec.education_id IS NOT NULL AND
8878               p_education_rec.education_id <> fnd_api.g_miss_num
8879            THEN
8880               OPEN education_cur (p_education_rec.education_id);
8881               FETCH education_cur INTO l_dummy;
8882 
8883               -- key is not unique, push an error onto the stack.
8884               IF NVL(education_cur%FOUND, FALSE) THEN
8885                  fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
8886                  fnd_message.set_token('COLUMN', 'education_id');
8887                  fnd_msg_pub.add;
8888                  x_return_status := fnd_api.g_ret_sts_error;
8889               END IF;
8890               CLOSE education_cur;
8891 
8892               /*IF g_debug THEN
8893                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8894                     'check that education_id is unique during creation. ' ||
8895                     ' x_return_status = ' || x_return_status, l_debug_prefix);
8896               END IF;
8897               */
8898               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8899                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8900                  p_message=>'check that education_id is unique during creation. ' ||
8901                     ' x_return_status = ' || x_return_status,
8902                                   p_msg_level=>fnd_log.level_statement);
8903               END IF;
8904 
8905            END IF;
8906         END IF;
8907 
8908 
8909         -- education_id is non-updateable field
8910         IF p_create_update_flag = 'U' THEN
8911               validate_nonupdateable (
8912                   p_column                                => 'education_id',
8913                   p_column_value                          => p_education_rec.education_id,
8914                   p_old_column_value                      => l_education_id,
8915                   x_return_status                         => x_return_status);
8916 
8917               /*IF g_debug THEN
8918                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8919                     'education_id is non-updateable field. ' ||
8920                     'x_return_status = ' || x_return_status, l_debug_prefix);
8921               END IF;
8922               */
8923               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8924                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'education_id is non-updateable field. ' ||
8925                     'x_return_status = ' || x_return_status,
8926                                   p_msg_level=>fnd_log.level_statement);
8927               END IF;
8928 
8929         END IF;
8930 
8931         /*IF g_debug THEN
8932                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8933                 '(+) after validate education_id ... ' ||
8934                 'x_return_status = ' || x_return_status, l_debug_prefix);
8935         END IF;
8936         */
8937         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8938            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate education_id ... ' ||
8939                 'x_return_status = ' || x_return_status,
8940                                   p_msg_level=>fnd_log.level_statement);
8941         END IF;
8942   END IF;
8943 
8944         --------------------------
8945         -- validation for party_id
8946         --------------------------
8947 /****Logical APIs - validation not required****/
8948   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
8949         -- party_id is mandatory field
8950         IF p_create_update_flag = 'C' THEN
8951             validate_mandatory (
8952                 p_create_update_flag                    => p_create_update_flag,
8953                 p_column                                => 'party_id',
8954                 p_column_value                          => p_education_rec.party_id,
8955                 x_return_status                         => x_return_status);
8956 
8957             /*IF g_debug THEN
8958                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8959                     'party_id is mandatory field. ' ||
8960                     'x_return_status = ' || x_return_status, l_debug_prefix);
8961             END IF;
8962             */
8963             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8964                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
8965                     'x_return_status = ' || x_return_status,
8966                                   p_msg_level=>fnd_log.level_statement);
8967             END IF;
8968 
8969 
8970         END IF;
8971 
8972         -- party_id is non-updateable field
8973         IF p_create_update_flag = 'U' THEN
8974             validate_nonupdateable (
8975                 p_column                                => 'party_id',
8976                 p_column_value                          => p_education_rec.party_id,
8977                 p_old_column_value                      => l_party_id,
8978                 x_return_status                         => x_return_status);
8979 
8980             /*IF g_debug THEN
8981                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
8982                     'party_id is non-updateable field. ' ||
8983                     'x_return_status = ' || x_return_status, l_debug_prefix);
8984             END IF;
8985             */
8986             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
8987                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
8988                     'x_return_status = ' || x_return_status,
8989                                   p_msg_level=>fnd_log.level_statement);
8990              END IF;
8991 
8992 
8993         END IF;
8994 
8995         -- 2820602, Changed message due to this bug.
8996         -- party_id has foreign key HZ_PARTIES.PARTY_ID
8997         IF p_create_update_flag = 'C'
8998            AND
8999            p_education_rec.party_id IS NOT NULL
9000            AND
9001            p_education_rec.party_id <> fnd_api.g_miss_num
9002         THEN
9003             BEGIN
9004                 SELECT 'Y'
9005                 INTO   l_dummy
9006                 FROM   hz_parties p
9007                 WHERE  p.party_id = p_education_rec.party_id and
9008                        party_type = 'PERSON';
9009 
9010             EXCEPTION
9011                 WHEN NO_DATA_FOUND THEN
9012                  fnd_message.set_name('AR', 'HZ_API_PARTY_NOT_PERSON');
9013                     fnd_message.set_token('TABLE_NAME', 'HZ_EDUCATION');
9014                     fnd_message.set_token('PARTY_ID_COL', 'party_id');
9015                     fnd_msg_pub.add;
9016                     x_return_status := fnd_api.g_ret_sts_error;
9017             END;
9018 
9019             /*IF g_debug THEN
9020                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9021                     'party_id has foreign key hz_parties.party_id. ' ||
9022                     'x_return_status = ' || x_return_status, l_debug_prefix);
9023             END IF;
9024             */
9025             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9026                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
9027                     'x_return_status = ' || x_return_status,
9028                                   p_msg_level=>fnd_log.level_statement);
9029             END IF;
9030 
9031 
9032         END IF;
9033   END IF;
9034 
9035         ------------------------------------
9036         -- validation for last_date_attended
9037         ------------------------------------
9038 
9039         -- If start_date_attended and last_dated_attended are passed,
9040         -- then last_date_attended must be greater than or equal to
9041         -- start_date_attended.
9042 
9043 
9044 
9045         --2888399, For update check added more checks
9046 
9047         IF p_create_update_flag = 'U'    THEN
9048               IF p_education_rec.start_date_attended IS NOT NULL  then
9049                  temp_start_date_attended := p_education_rec.start_date_attended;
9050               ELSE
9051                  temp_start_date_attended := l_start_date_attended;
9052               END IF;
9053         ELSIF p_create_update_flag = 'C' THEN
9054               temp_start_date_attended := p_education_rec.start_date_attended;
9055         END IF;
9056 
9057         IF p_create_update_flag = 'U'    THEN
9058               IF p_education_rec.last_date_attended IS NOT NULL then
9059                  temp_last_date_attended := p_education_rec.last_date_attended;
9060               ELSE
9061                  temp_last_date_attended := l_last_date_attended;
9062               END IF;
9063         ELSIF p_create_update_flag = 'C' THEN
9064               temp_last_date_attended := p_education_rec.last_date_attended;
9065         END IF;
9066 
9067         IF (temp_start_date_attended IS NOT NULL AND
9068             temp_start_date_attended <> FND_API.G_MISS_DATE AND
9069             temp_last_date_attended IS NOT NULL AND
9070             temp_last_date_attended <> FND_API.G_MISS_DATE) THEN
9071 
9072             validate_start_end_date (
9073 
9074               p_create_update_flag                    => p_create_update_flag,
9075               p_start_date_column_name                => 'start_date_attended',
9076               p_start_date                            => p_education_rec.start_date_attended,
9077               p_old_start_date                        => l_start_date_attended,
9078               p_end_date_column_name                  => 'last_date_attended',
9079               p_end_date                              => p_education_rec.last_date_attended,
9080               p_old_end_date                          => l_last_date_attended,
9081               x_return_status                         => x_return_status
9082             );
9083 
9084             /*IF g_debug THEN
9085                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9086                  'check whether last_date_attended is greater then or equal to start_date_attended. ' ||
9087                  'x_return_status = ' || x_return_status, l_debug_prefix);
9088             END IF;
9089             */
9090             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9091                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9092                 p_message=>'check whether last_date_attended is greater then or equal to start_date_attended. ' ||
9093                  'x_return_status = ' || x_return_status,
9094                                   p_msg_level=>fnd_log.level_statement);
9095             END IF;
9096 
9097         END IF;
9098 
9099         /*IF g_debug THEN
9100            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9101            '(+) after validating the last_date_attended and start_date_attended... ' ||
9102            'x_return_status = ' || x_return_status, l_debug_prefix);
9103         END IF;
9104         */
9105         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9106            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9107            p_message=>'(+) after validating the last_date_attended and start_date_attended... ' ||
9108            'x_return_status = ' || x_return_status,
9109                                   p_msg_level=>fnd_log.level_statement);
9110         END IF;
9111 
9112 
9113 
9114         --------------------------------------
9115         -- validation for school_attended_name
9116         --------------------------------------
9117 
9118         -- If school_party_id is passed, school_attended_name
9119         -- should not be passed.
9120 
9121         --2888486, Added these checks for update
9122         IF p_create_update_flag = 'U'    THEN
9123               IF p_education_rec.school_party_id IS NOT NULL then
9124                  temp_school_party_id := p_education_rec.school_party_id;
9125               ELSE
9126                  temp_school_party_id := l_school_party_id;
9127               END IF;
9128         ELSIF p_create_update_flag = 'C' THEN
9129               temp_school_party_id := p_education_rec.school_party_id;
9130         END IF;
9131 
9132         IF p_create_update_flag = 'U'    THEN
9133               IF p_education_rec.school_attended_name IS NOT NULL  then
9134                  temp_school_attended_name := p_education_rec.school_attended_name;
9135               ELSE
9136                  temp_school_attended_name := l_school_attended_name;
9137               END IF;
9138         ELSIF p_create_update_flag = 'C' THEN
9139               temp_school_attended_name := p_education_rec.school_attended_name;
9140         END IF;
9141 
9142         IF temp_school_party_id is NOT NULL and
9143            temp_school_party_id <> fnd_api.g_miss_num and
9144            temp_school_attended_name is NOT NULL and
9145            temp_school_attended_name <> fnd_api.g_miss_char then
9146 
9147                  fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION2');
9148                  fnd_message.set_token('COLUMN1', 'school_party_id');
9149                  fnd_message.set_token('COLUMN2', 'school_attended_name');
9150                  fnd_msg_pub.add;
9151                  x_return_status := fnd_api.g_ret_sts_error;
9152         END IF;
9153 
9154         /*IF g_debug THEN
9155                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9156                     'check that school_attended_name is empty when school_party_id isn t. '||
9157                     ' x_return_status = ' || x_return_status, l_debug_prefix);
9158         END IF;
9159         */
9160         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9161            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9162            p_message=>'check that school_attended_name is empty when school_party_id isn t. '||
9163                     ' x_return_status = ' || x_return_status,
9164                                   p_msg_level=>fnd_log.level_statement);
9165         END IF;
9166 
9167 
9168         ---------------------------------
9169         -- validation for school_party_id
9170         ---------------------------------
9171 
9172 
9173         -- school_party_id must exist in HZ_PARTIES
9174         IF p_education_rec.school_party_id IS NOT NULL
9175            AND
9176            p_education_rec.school_party_id <> fnd_api.g_miss_num
9177         THEN
9178            BEGIN
9179                SELECT 'Y'
9180                INTO   l_dummy
9181                FROM   HZ_PARTIES
9182                WHERE  PARTY_ID = p_education_rec.school_party_id AND
9183                       PARTY_TYPE= 'ORGANIZATION';
9184 
9185            EXCEPTION
9186                WHEN NO_DATA_FOUND THEN
9187                     fnd_message.set_name('AR', 'HZ_API_PARTY_NOT_ORG');
9188                     fnd_message.set_token('TABLE_NAME', 'HZ_EDUCATION');
9189                     fnd_message.set_token('PARTY_ID_COL', 'school_party_id');
9190                     fnd_msg_pub.add;
9191                     x_return_status := fnd_api.g_ret_sts_error;
9192            END;
9193 
9194            /*IF g_debug THEN
9195                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9196                   'school_party_id should be in hz_parties.party_id. ' ||
9197                   'x_return_status = ' || x_return_status, l_debug_prefix);
9198            END IF;
9199            */
9200            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9201                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9202                   p_message=>'school_party_id should be in hz_parties.party_id. ' ||
9203                   'x_return_status = ' || x_return_status,
9204                                   p_msg_level=>fnd_log.level_statement);
9205            END IF;
9206 
9207         END IF;
9208 
9209 
9210         ---------------------------------------
9211         -- validation for type_of_school
9212         ---------------------------------------
9213 
9214         -- type_of_school is a lookup code for lookup type HZ_TYPE_OF_SCHOOL
9215 
9216         -- Bug 3425871
9217         -- The validation will be called only if the value changes.
9218 
9219         IF p_education_rec.type_of_school IS NOT NULL
9220             AND
9221            p_education_rec.type_of_school <> fnd_api.g_miss_char
9222             AND
9223            (
9224             p_create_update_flag = 'C'
9225             OR
9226               (
9227                p_create_update_flag = 'U'
9228                AND
9229                p_education_rec.type_of_school <> l_type_of_school
9230               )
9231            )
9232         THEN
9233 
9234             validate_lookup (
9235                 p_column                                => 'type_of_school',
9236                 p_lookup_type                           => 'HZ_TYPE_OF_SCHOOL',
9237                 p_column_value                          => p_education_rec.type_of_school,
9238                 x_return_status                         => x_return_status);
9239 
9240 
9241             /*IF g_debug THEN
9242                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9243                     'type_of_school should be in lookup HZ_TYPE_OF_SCHOOL. ' ||
9244                     'x_return_status = ' || x_return_status, l_debug_prefix);
9245             END IF;
9246             */
9247             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9248                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9249                 p_message=>'type_of_school should be in lookup HZ_TYPE_OF_SCHOOL. ' ||
9250                            'x_return_status = ' || x_return_status,
9251                                    p_msg_level=>fnd_log.level_statement);
9252             END IF;
9253         END IF;
9254 
9255 
9256         ------------------------
9257         -- validation for status
9258         ------------------------
9259 /****Logical APIs - validation not required****/
9260   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9261         -- status is lookup code in lookup type REGISTRY_STATUS
9262         IF p_education_rec.status IS NOT NULL
9263            AND
9264            p_education_rec.status <> fnd_api.g_miss_char
9265            AND
9266            (p_create_update_flag = 'C'
9267             OR
9268             (p_create_update_flag = 'U'
9269              AND
9270              p_education_rec.status <> NVL(l_status, fnd_api.g_miss_char)
9271            )
9272           )
9273         THEN
9274             validate_lookup (
9275                 p_column                                => 'status',
9276                 p_lookup_type                           => 'REGISTRY_STATUS',
9277                 p_column_value                          => p_education_rec.status,
9278                 x_return_status                         => x_return_status);
9279 
9280             /*IF g_debug THEN
9281                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9282                     'status is lookup code in lookup type REGISTRY_STATUS. ' ||
9283                     'x_return_status = ' || x_return_status, l_debug_prefix);
9284             END IF;
9285             */
9286             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9287                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9288                   p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
9289                                         'x_return_status = ' || x_return_status,
9290                                   p_msg_level=>fnd_log.level_statement);
9291             END IF;
9292 
9293 
9294         END IF;
9295   END IF;
9296 
9297         -- status cannot be set to null during update
9298         IF p_create_update_flag = 'U' THEN
9299             validate_cannot_update_to_null (
9300                 p_column                                => 'status',
9301                 p_column_value                          => p_education_rec.status,
9302                 x_return_status                         => x_return_status);
9303         END IF;
9304 
9305 
9306         --------------------------------------
9307         -- validate created_by_module
9308         --------------------------------------
9309 
9310         validate_created_by_module(
9311           p_create_update_flag     => p_create_update_flag,
9312           p_created_by_module      => p_education_rec.created_by_module,
9313           p_old_created_by_module  => l_created_by_module,
9314           x_return_status          => x_return_status);
9315 
9316         --------------------------------------
9317         -- validate application_id
9318         --------------------------------------
9319 
9320         validate_application_id(
9321           p_create_update_flag     => p_create_update_flag,
9322           p_application_id         => p_education_rec.application_id,
9323           p_old_application_id     => l_application_id,
9324           x_return_status          => x_return_status);
9325 
9326        IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
9327                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_education (-)',
9328                                p_msg_level=>fnd_log.level_procedure);
9329        END IF;
9330 
9331   END validate_education;
9332 
9333 
9334 /**
9335    * PROCEDURE validate_employment_history
9336    *
9337    * DESCRIPTION
9338    *     Validates employment_history record. Checks for
9339    *         uniqueness
9340    *         lookup types
9341    *         mandatory columns
9342    *         non-updateable fields
9343    *         foreign key validations
9344    *         other validations
9345    *
9346    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
9347    *
9348    * ARGUMENTS
9349    *   IN:
9350    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
9351    *     p_employment_history_rec       Employment_history record.
9352    *     p_rowid                        Rowid of the record (used only in update mode).
9353    *   IN/OUT:
9354    *     x_return_status                Return status after the call. The status can
9355    *                                    be FND_API.G_RET_STS_SUCCESS (success),
9356    *                                    fnd_api.g_ret_sts_error (error),
9357    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
9358    *
9359    * NOTES
9360    *
9361    * MODIFICATION HISTORY
9362    *
9363    *   31-Jan-2001    Porkodi C         o Created.
9364    *   11-Mar-2003    Porkodi C         o 2829037, Changed the code to update values for tenure_code and
9365    *                                      fraction_of_tenure, while the value for faculty_position_flag is
9366    *                                      is null.
9367    *   09-Apr-2003    Porkodi C         o 2890662, validation for begin_date and end_date combination has
9368    *                                      been modified.
9369    *   25-Oct-2005   Jayashree K        o 3848056  Validation for weekly hours to hold the value 0
9370    */
9371 
9372     PROCEDURE validate_employment_history(
9373         p_create_update_flag                    IN      VARCHAR2,
9374         p_employment_history_rec                IN      HZ_PERSON_INFO_V2PUB.EMPLOYMENT_HISTORY_REC_TYPE,
9375         p_rowid                                 IN      ROWID ,
9376         x_return_status                         IN OUT NOCOPY  VARCHAR2
9377    ) IS
9378 
9379         l_count                                          NUMBER;
9380         l_employment_history_id                          NUMBER;
9381         l_dummy                                          VARCHAR2(1);
9382         l_party_id                                       NUMBER := p_employment_history_rec.party_id;
9383         l_created_by_module                              VARCHAR2(150);
9384         l_application_id                                 NUMBER;
9385         l_status                                         VARCHAR2(1);
9386         l_debug_prefix                                   VARCHAR2(30) := '';
9387         l_begin_date                                     DATE;
9388         l_end_date                                       DATE;
9389         l_faculty_position_flag                          VARCHAR2(1);
9390         l_employed_by_party_id                           NUMBER;
9391         l_employed_by_name_company                       VARCHAR2(60);
9392         l_employed_as_title_code                         VARCHAR2(30);
9393         l_employed_as_title                              VARCHAR2(60);
9394         temp_faculty_position_flag                       VARCHAR2(1);
9395         temp_begin_date                                  DATE;
9396         temp_end_date                                    DATE;
9397         temp_employed_by_party_id                        NUMBER;
9398         temp_employed_by_name_company                    VARCHAR2(60);
9399         temp_employed_as_title_code                      VARCHAR2(30);
9400         temp_employed_as_title                           VARCHAR2(60);
9401 
9402         CURSOR employment_history_cur (p_employment_history_id IN NUMBER) IS
9403               SELECT 'Y'
9404               FROM   hz_employment_history hc
9405         WHERE  hc.employment_history_id = p_employment_history_id;
9406 
9407     BEGIN
9408 
9409         --enable_debug;
9410 
9411         -- Debug info.
9412         /*IF g_debug THEN
9413             hz_utility_v2pub.debug ('validate_employment_history (+)');
9414         END IF;
9415         */
9416         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
9417                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_employment_history (+)',
9418                                p_msg_level=>fnd_log.level_procedure);
9419         END IF;
9420 
9421         -- do the query to get old values for update
9422         IF p_create_update_flag = 'U'
9423         THEN
9424             SELECT EMPLOYMENT_HISTORY_ID,
9425                    PARTY_ID,
9426                    BEGIN_DATE,
9427                    END_DATE,
9428                    FACULTY_POSITION_FLAG,
9429                    EMPLOYED_BY_PARTY_ID,
9430                    EMPLOYED_BY_NAME_COMPANY,
9431                    EMPLOYED_AS_TITLE_CODE,
9432                    EMPLOYED_AS_TITLE,
9433                    STATUS,
9434                    CREATED_BY_MODULE,
9435                    APPLICATION_ID
9436             INTO   l_employment_history_id,
9437                    l_party_id,
9438                    l_begin_date,
9439                    l_end_date,
9440                    l_faculty_position_flag,
9441                    l_employed_by_party_id,
9442                    l_employed_by_name_company,
9443                    l_employed_as_title_code,
9444                    l_employed_as_title,
9445                    l_status,
9446                    l_created_by_module,
9447                    l_application_id
9448             FROM   HZ_EMPLOYMENT_HISTORY
9449             WHERE  ROWID = p_rowid;
9450         END IF;
9451 
9452 
9453         --------------------------------------
9454         -- validate employment_history_id
9455         --------------------------------------
9456 /****Logical APIs - validation not required****/
9457   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9458         -- If primary key value is passed, check for uniqueness.
9459         -- If primary key value is not passed, it will be generated
9460         -- from sequence by table handler.
9461 
9462 
9463         IF p_create_update_flag = 'C' THEN
9464            IF p_employment_history_rec.employment_history_id IS NOT NULL AND
9465               p_employment_history_rec.employment_history_id <> fnd_api.g_miss_num
9466            THEN
9467               OPEN employment_history_cur (p_employment_history_rec.employment_history_id);
9468               FETCH employment_history_cur INTO l_dummy;
9469 
9470               -- key is not unique, push an error onto the stack.
9471               IF NVL(employment_history_cur%FOUND, FALSE) THEN
9472                  fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
9473                  fnd_message.set_token('COLUMN', 'employment_history_id');
9474                  fnd_msg_pub.add;
9475                  x_return_status := fnd_api.g_ret_sts_error;
9476               END IF;
9477               CLOSE employment_history_cur;
9478 
9479               /*IF g_debug THEN
9480                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9481                     'check that employment_history_id is unique during creation. ' ||
9482                     ' x_return_status = ' || x_return_status, l_debug_prefix);
9483               END IF;
9484               */
9485               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9486                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9487                 p_message=>'check that employment_history_id is unique during creation. ' ||
9488                         ' x_return_status = ' || x_return_status,
9489                                   p_msg_level=>fnd_log.level_statement);
9490               END IF;
9491 
9492            END IF;
9493         END IF;
9494 
9495 
9496         -- employment_history_id is non-updateable field
9497         IF p_create_update_flag = 'U' THEN
9498               validate_nonupdateable (
9499                   p_column                                => 'employment_history_id',
9500                   p_column_value                          => p_employment_history_rec.employment_history_id,
9501                   p_old_column_value                      => l_employment_history_id,
9502                   x_return_status                         => x_return_status);
9503 
9504               /*IF g_debug THEN
9505                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9506                     'employment_history_id is non-updateable field. ' ||
9507                     'x_return_status = ' || x_return_status, l_debug_prefix);
9508               END IF;
9509               */
9510               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9511                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9512                   p_message=>'employment_history_id is non-updateable field. ' ||
9513                         'x_return_status = ' || x_return_status,
9514                                   p_msg_level=>fnd_log.level_statement);
9515                END IF;
9516 
9517         END IF;
9518 
9519         /*IF g_debug THEN
9520                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9521                 '(+) after validation of employment_history_id ... ' ||
9522                 'x_return_status = ' || x_return_status, l_debug_prefix);
9523         END IF;
9524         */
9525         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9526            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9527            p_message=>'(+) after validation of employment_history_id ... ' ||
9528                 'x_return_status = ' || x_return_status,
9529                                   p_msg_level=>fnd_log.level_statement);
9530         END IF;
9531   END IF;
9532 
9533         --------------------------
9534         -- validation for party_id
9535         --------------------------
9536 /****Logical APIs - validation not required****/
9537   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
9538         -- party_id is mandatory field
9539         IF p_create_update_flag = 'C' THEN
9540             validate_mandatory (
9541                 p_create_update_flag                    => p_create_update_flag,
9542                 p_column                                => 'party_id',
9543                 p_column_value                          => p_employment_history_rec.party_id,
9544                 x_return_status                         => x_return_status);
9545 
9546             /*IF g_debug THEN
9547                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9548                     'party_id is mandatory field. ' ||
9549                     'x_return_status = ' || x_return_status, l_debug_prefix);
9550             END IF;
9551             */
9552             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9553                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
9554                     'x_return_status = ' || x_return_status,
9555                                   p_msg_level=>fnd_log.level_statement);
9556              END IF;
9557 
9558 
9559         END IF;
9560 
9561         -- party_id is non-updateable field
9562         IF p_create_update_flag = 'U' THEN
9563             validate_nonupdateable (
9564                 p_column                                => 'party_id',
9565                 p_column_value                          => p_employment_history_rec.party_id,
9566                 p_old_column_value                      => l_party_id,
9567                 x_return_status                         => x_return_status);
9568 
9569             /*IF g_debug THEN
9570                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9571                     'party_id is non-updateable field. ' ||
9572                     'x_return_status = ' || x_return_status, l_debug_prefix);
9573             END IF;
9574             */
9575             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9576                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
9577                     'x_return_status = ' || x_return_status,
9578                                   p_msg_level=>fnd_log.level_statement);
9579             END IF;
9580 
9581 
9582         END IF;
9583 
9584         -- party_id has foreign key HZ_PARTIES.PARTY_ID
9585         IF p_create_update_flag = 'C'
9586            AND
9587            p_employment_history_rec.party_id IS NOT NULL
9588            AND
9589            p_employment_history_rec.party_id <> fnd_api.g_miss_num
9590         THEN
9591             BEGIN
9592                 SELECT 'Y'
9593                 INTO   l_dummy
9594                 FROM   hz_parties p
9595                 WHERE  p.party_id = p_employment_history_rec.party_id and
9596                        party_type = 'PERSON';
9597 
9598             EXCEPTION
9599                 WHEN NO_DATA_FOUND THEN
9600                     fnd_message.set_name('AR', 'HZ_API_PARTY_NOT_PERSON');
9601                     fnd_message.set_token('TABLE_NAME', 'HZ_EMPLOYMENT_HISTORY');
9602                     fnd_message.set_token('PARTY_ID_COL', 'party_id');
9603                     fnd_msg_pub.add;
9604                     x_return_status := fnd_api.g_ret_sts_error;
9605             END;
9606 
9607             /*IF g_debug THEN
9608                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9609                     'party_id has foreign key hz_parties.party_id. ' ||
9610                     'x_return_status = ' || x_return_status, l_debug_prefix);
9611             END IF;
9612             */
9613             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9614                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
9615                     'x_return_status = ' || x_return_status,
9616                                   p_msg_level=>fnd_log.level_statement);
9617             END IF;
9618 
9619 
9620         END IF;
9621   END IF;
9622 
9623         ------------------------------------
9624         -- validation for end_date
9625         ------------------------------------
9626 
9627         -- If begin_date and end_date are passed, then end_date must be
9628         -- greater than or equal to begin_date.
9629 
9630 
9631 
9632         --2890662, Added more if conditions
9633 
9634         IF p_create_update_flag = 'U'    THEN
9635               IF p_employment_history_rec.begin_date IS NOT NULL  then
9636                  temp_begin_date := p_employment_history_rec.begin_date;
9637               ELSE
9638                  temp_begin_date := l_begin_date;
9639               END IF;
9640         ELSIF p_create_update_flag = 'C' THEN
9641               temp_begin_date := p_employment_history_rec.begin_date;
9642         END IF;
9643 
9644         IF p_create_update_flag = 'U'    THEN
9645               IF p_employment_history_rec.end_date IS NOT NULL then
9646                  temp_end_date := p_employment_history_rec.end_date;
9647               ELSE
9648                  temp_end_date := l_end_date;
9649               END IF;
9650         ELSIF p_create_update_flag = 'C' THEN
9651               temp_end_date := p_employment_history_rec.end_date;
9652         END IF;
9653 
9654         IF (temp_begin_date IS NOT NULL AND
9655             temp_begin_date <> FND_API.G_MISS_DATE AND
9656             temp_end_date IS NOT NULL AND
9657             temp_end_date <> FND_API.G_MISS_DATE) THEN
9658 
9659             validate_start_end_date (
9660 
9661               p_create_update_flag                    => p_create_update_flag,
9662               p_start_date_column_name                => 'begin_date',
9663               p_start_date                            => p_employment_history_rec.begin_date,
9664               p_old_start_date                        => l_begin_date,
9665               p_end_date_column_name                  => 'end_date',
9666               p_end_date                              => p_employment_history_rec.end_date,
9667               p_old_end_date                          => l_end_date,
9668               x_return_status                         => x_return_status
9669             );
9670 
9671             /*IF g_debug THEN
9672                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9673                  'check whether end_date is greater than or equal to begin_date. ' ||
9674                  'x_return_status = ' || x_return_status, l_debug_prefix);
9675             END IF;
9676             */
9677             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9678                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9679                 p_message=>'check whether end_date is greater than or equal to begin_date. ' ||
9680                  'x_return_status = ' || x_return_status,
9681                                   p_msg_level=>fnd_log.level_statement);
9682             END IF;
9683 
9684         END IF;
9685 
9686         /*IF g_debug THEN
9687            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9688            '(+) after validating the begin_date and end_date... ' ||
9689            'x_return_status = ' || x_return_status, l_debug_prefix);
9690         END IF;
9691         */
9692         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9693            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9694            p_message=>'(+) after validating the begin_date and end_date... ' ||
9695            'x_return_status = ' || x_return_status,
9696                                   p_msg_level=>fnd_log.level_statement);
9697         END IF;
9698 
9699 
9700 
9701         ---------------------------------------
9702         -- validation for employment_type_code
9703         ---------------------------------------
9704 
9705         -- employment_type_code is validated against lookup type HZ_EMPLOYMENT_TYPE
9706         validate_lookup (
9707             p_column                                => 'employment_type_code',
9708             p_lookup_type                           => 'HZ_EMPLOYMENT_TYPE',
9709             p_column_value                          => p_employment_history_rec.employment_type_code,
9710             x_return_status                         => x_return_status);
9711 
9712 
9713         /*IF g_debug THEN
9714             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9715                 'employment_type_code should be in lookup HZ_EMPLOYMENT_TYPE. ' ||
9716                 'x_return_status = ' || x_return_status, l_debug_prefix);
9717         END IF;
9718         */
9719         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9720            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9721            p_message=>'employment_type_code should be in lookup HZ_EMPLOYMENT_TYPE. ' ||
9722                 'x_return_status = ' || x_return_status,
9723                                   p_msg_level=>fnd_log.level_statement);
9724         END IF;
9725 
9726 
9727 
9728         ----------------------------------------
9729         -- validation for employed_as_title_code
9730         ----------------------------------------
9731 
9732         -- employed_as_title_code is validated against lookup type RESPONSIBILITY
9733         validate_lookup (
9734             p_column                                => 'employed_as_title_code',
9735             p_lookup_type                           => 'RESPONSIBILITY',
9736             p_column_value                          => p_employment_history_rec.employed_as_title_code,
9737             x_return_status                         => x_return_status);
9738 
9739 
9740         /*IF g_debug THEN
9741             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9742                 'employed_as_title_code should be in lookup RESPONSIBILITY. ' ||
9743                 'x_return_status = ' || x_return_status, l_debug_prefix);
9744         END IF;
9745         */
9746         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9747            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9748            p_message=>'employed_as_title_code should be in lookup RESPONSIBILITY. ' ||
9749                 'x_return_status = ' || x_return_status,
9750                                   p_msg_level=>fnd_log.level_statement);
9751         END IF;
9752 
9753 
9754 
9755         ------------------------------------
9756         -- validation for employed_as_title
9757         ------------------------------------
9758 
9759         -- If employed_as_title_code is passed, employed_as_title
9760         -- should be null.
9761 
9762         IF p_create_update_flag = 'U'    THEN
9763               IF p_employment_history_rec.employed_as_title_code IS NOT NULL  then
9764                  temp_employed_as_title_code := p_employment_history_rec.employed_as_title_code;
9765               ELSE
9766                  temp_employed_as_title_code := l_employed_as_title_code;
9767               END IF;
9768         ELSIF p_create_update_flag = 'C' THEN
9769               temp_employed_as_title_code := p_employment_history_rec.employed_as_title_code;
9770         END IF;
9771 
9772 
9773         IF p_create_update_flag = 'U'    THEN
9774               IF p_employment_history_rec.employed_as_title IS NOT NULL  then
9775                  temp_employed_as_title := p_employment_history_rec.employed_as_title;
9776               ELSE
9777                  temp_employed_as_title := l_employed_as_title;
9778               END IF;
9779         ELSIF p_create_update_flag = 'C' THEN
9780               temp_employed_as_title := p_employment_history_rec.employed_as_title;
9781         END IF;
9782 
9783 
9784         IF (temp_employed_as_title_code IS NOT NULL and
9785             temp_employed_as_title_code <> FND_API.G_MISS_CHAR AND
9786             temp_employed_as_title IS NOT NULL AND
9787             temp_employed_as_title <> FND_API.G_MISS_CHAR) THEN
9788 
9789                  fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION2');
9790                  fnd_message.set_token('COLUMN1', 'employed_as_title');
9791                  fnd_message.set_token('COLUMN2', 'employed_as_title_code');
9792                  fnd_msg_pub.add;
9793                  x_return_status := fnd_api.g_ret_sts_error;
9794 
9795               /*IF g_debug THEN
9796                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9797                     'check that employed_as_title is empty when employed_as_title_code isn t. '||
9798                     ' x_return_status = ' || x_return_status, l_debug_prefix);
9799               END IF;
9800               */
9801               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9802                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9803                 p_message=>'check that employed_as_title is empty when employed_as_title_code isn t. '||
9804                     ' x_return_status = ' || x_return_status,
9805                                   p_msg_level=>fnd_log.level_statement);
9806               END IF;
9807 
9808         END IF;
9809 
9810 
9811         /*IF g_debug THEN
9812         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9813         '(+) after validating employed_as_title ... ' ||
9814         'x_return_status = ' || x_return_status, l_debug_prefix);
9815         END IF;
9816         */
9817         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9818            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9819            p_message=>'(+) after validating employed_as_title ... ' ||
9820                         'x_return_status = ' || x_return_status,
9821                                   p_msg_level=>fnd_log.level_statement);
9822         END IF;
9823 
9824 
9825 
9826         --------------------------------------
9827         -- validation for employed_by_party_id
9828         --------------------------------------
9829 
9830 
9831         -- employed_by_party_id must exist in HZ_PARTIES
9832         IF p_employment_history_rec.employed_by_party_id IS NOT NULL
9833            AND
9834            p_employment_history_rec.employed_by_party_id <> fnd_api.g_miss_num
9835         THEN
9836            BEGIN
9837                SELECT 'Y'
9838                INTO   l_dummy
9839                FROM   HZ_PARTIES
9840                WHERE  PARTY_ID = p_employment_history_rec.employed_by_party_id;
9841 
9842            EXCEPTION
9843                WHEN NO_DATA_FOUND THEN
9844                     fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
9845                     fnd_message.set_token('FK', 'employed_by_party_id');
9846                     fnd_message.set_token('COLUMN', 'party_id');
9847                     fnd_message.set_token('TABLE', 'hz_parties');
9848                     fnd_msg_pub.add;
9849                     x_return_status := fnd_api.g_ret_sts_error;
9850            END;
9851 
9852            /*IF g_debug THEN
9853                hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9854                   'employed_by_party_id should be in hz_parties.party_id. ' ||
9855                   'x_return_status = ' || x_return_status, l_debug_prefix);
9856            END IF;
9857            */
9858            IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9859                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9860                  p_message=>'employed_by_party_id should be in hz_parties.party_id. ' ||
9861                   'x_return_status = ' || x_return_status,
9862                                   p_msg_level=>fnd_log.level_statement);
9863           END IF;
9864 
9865         END IF;
9866 
9867 
9868         ------------------------------------------
9869         -- validation for employed_by_name_company
9870         ------------------------------------------
9871 
9872         -- If employed_by_party_id is passed, employed_by_name_company
9873         -- should be null.
9874 
9875         IF p_create_update_flag = 'U'    THEN
9876               IF p_employment_history_rec.employed_by_party_id IS NOT NULL  then
9877                  temp_employed_by_party_id := p_employment_history_rec.employed_by_party_id;
9878               ELSE
9879                  temp_employed_by_party_id := l_employed_by_party_id;
9880               END IF;
9881         ELSIF p_create_update_flag = 'C' THEN
9882               temp_employed_by_party_id := p_employment_history_rec.employed_by_party_id;
9883         END IF;
9884 
9885 
9886         IF p_create_update_flag = 'U'    THEN
9887               IF p_employment_history_rec.employed_by_name_company IS NOT NULL  then
9888                  temp_employed_by_name_company := p_employment_history_rec.employed_by_name_company;
9889               ELSE
9890                  temp_employed_by_name_company := l_employed_by_name_company;
9891               END IF;
9892         ELSIF p_create_update_flag = 'C' THEN
9893               temp_employed_by_name_company := p_employment_history_rec.employed_by_name_company;
9894         END IF;
9895 
9896 
9897         IF (temp_employed_by_party_id IS NOT NULL and
9898             temp_employed_by_party_id <> FND_API.G_MISS_NUM AND
9899             temp_employed_by_name_company IS NOT NULL AND
9900             temp_employed_by_name_company <> FND_API.G_MISS_CHAR) THEN
9901 
9902                  fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION2');
9903                  fnd_message.set_token('COLUMN1', 'employed_by_name_company');
9904                  fnd_message.set_token('COLUMN2', 'employed_by_party_id');
9905                  fnd_msg_pub.add;
9906                  x_return_status := fnd_api.g_ret_sts_error;
9907 
9908               /*IF g_debug THEN
9909                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9910                     'check that employed_by_name_company is empty when employed_by_party_id isn t. ' ||
9911                     ' x_return_status = ' || x_return_status, l_debug_prefix);
9912               END IF;
9913               */
9914               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9915                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9916                 p_message=>'check that employed_by_name_company is empty when employed_by_party_id isn t. ' ||
9917                     ' x_return_status = ' || x_return_status,
9918                                   p_msg_level=>fnd_log.level_statement);
9919               END IF;
9920 
9921         END IF;
9922 
9923 
9924         /*IF g_debug THEN
9925         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9926         '(+) after validating employed_by_name_company ... ' ||
9927         'x_return_status = ' || x_return_status, l_debug_prefix);
9928         END IF;
9929         */
9930         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9931            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9932            p_message=>'(+) after validating employed_by_name_company ... ' ||
9933                                         'x_return_status = ' || x_return_status,
9934                                   p_msg_level=>fnd_log.level_statement);
9935         END IF;
9936 
9937 
9938 
9939         --------------------------------------
9940         -- validation for weekly_work_hours
9941         --------------------------------------
9942         -- 3848056 Changed the condition for the Weekly Hours to hold the value 0
9943 
9944         -- If weekly_work_hours is passed, must be greater than or equal to  zero
9945         -- and less than or equal to 168.
9946 
9947         IF p_employment_history_rec.weekly_work_hours IS NOT NULL AND
9948               p_employment_history_rec.weekly_work_hours <> fnd_api.g_miss_num
9949            THEN
9950 
9951               IF p_employment_history_rec.weekly_work_hours < 0  OR
9952                  p_employment_history_rec.weekly_work_hours > 168  THEN
9953 
9954                  fnd_message.set_name('AR', 'HZ_API_VALUE_BETWEEN');
9955                  fnd_message.set_token('COLUMN', 'weekly_work_hours');
9956                  --  Bug 4226199 : This should be changed for bug 3848056
9957                  fnd_message.set_token('VALUE1', '0');
9958                  fnd_message.set_token('VALUE2', '168');
9959                  fnd_msg_pub.add;
9960                  x_return_status := fnd_api.g_ret_sts_error;
9961               END IF;
9962 
9963               /*IF g_debug THEN
9964                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9965                     'check that weekly_work_hours is 1 to 168 value range. ' ||
9966                     ' x_return_status = ' || x_return_status, l_debug_prefix);
9967               END IF;
9968               */
9969               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9970                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9971                  p_message=>'check that weekly_work_hours is 1 to 168 value range. ' ||
9972                          ' x_return_status = ' || x_return_status,
9973                                   p_msg_level=>fnd_log.level_statement);
9974                END IF;
9975 
9976         END IF;
9977 
9978 
9979         /*IF g_debug THEN
9980         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9981         '(+) after validating weekly_work_hours ... ' ||
9982         'x_return_status = ' || x_return_status, l_debug_prefix);
9983         END IF;
9984         */
9985         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
9986            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
9987            p_message=>'(+) after validating weekly_work_hours ... ' ||
9988                                                 'x_return_status = ' || x_return_status,
9989                                   p_msg_level=>fnd_log.level_statement);
9990         END IF;
9991 
9992 
9993 
9994         ---------------------------------------
9995         -- validation for faculty_position_flag
9996         ---------------------------------------
9997 
9998         -- faculty_position_flag is mandatory field
9999 
10000         validate_mandatory (
10001             p_create_update_flag                    => p_create_update_flag,
10002             p_column                                => 'faculty_position_flag',
10003             p_column_value                          => p_employment_history_rec.faculty_position_flag,
10004             x_return_status                         => x_return_status);
10005 
10006         /*IF g_debug THEN
10007            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10008               'faculty_position_flag is mandatory field. ' ||
10009               'x_return_status = ' || x_return_status, l_debug_prefix);
10010         END IF;
10011         */
10012         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10013            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'faculty_position_flag is mandatory field. ' ||
10014                                                 'x_return_status = ' || x_return_status,
10015                                   p_msg_level=>fnd_log.level_statement);
10016         END IF;
10017 
10018 
10019 
10020         -- faculty_position_flag is validated against lookup type YES/NO
10021         validate_lookup (
10022             p_column                                => 'faculty_position_flag',
10023             p_lookup_type                           => 'YES/NO',
10024             p_column_value                          => p_employment_history_rec.faculty_position_flag,
10025             x_return_status                         => x_return_status);
10026 
10027 
10028         /*IF g_debug THEN
10029             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10030                 'faculty_position_flag should be in lookup YES/NO. ' ||
10031                 'x_return_status = ' || x_return_status, l_debug_prefix);
10032         END IF;
10033         */
10034         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10035            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'faculty_position_flag should be in lookup YES/NO. ' ||
10036                         'x_return_status = ' || x_return_status,
10037                                   p_msg_level=>fnd_log.level_statement);
10038          END IF;
10039 
10040 
10041 
10042         --------------------------------
10043         -- validation for tenure_code
10044         --------------------------------
10045 
10046         -- If tenure_code is passed, faculty_position_flag
10047         -- should be Y.
10048 
10049         --2829037 added few more checks due to this bug.
10050         IF p_create_update_flag = 'U'    THEN
10051               IF p_employment_history_rec.faculty_position_flag IS NOT NULL  then
10052                  temp_faculty_position_flag := p_employment_history_rec.faculty_position_flag;
10053               ELSE
10054                  temp_faculty_position_flag := l_faculty_position_flag;
10055               END IF;
10056         ELSIF p_create_update_flag = 'C' THEN
10057               temp_faculty_position_flag := p_employment_history_rec.faculty_position_flag;
10058         END IF;
10059 
10060         IF p_employment_history_rec.tenure_code IS NOT NULL AND
10061            p_employment_history_rec.tenure_code <> fnd_api.g_miss_char then
10062 
10063            IF temp_faculty_position_flag = 'Y' THEN
10064 
10065                  validate_lookup (
10066                      p_column                                => 'tenure_code',
10067                      p_lookup_type                           => 'HZ_TENURE_CODE',
10068                      p_column_value                          => p_employment_history_rec.tenure_code,
10069                      x_return_status                         => x_return_status);
10070 
10071 
10072               /*IF g_debug THEN
10073                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10074                     'tenure_code should be in lookup HZ_TENURE_CODE. ' ||
10075                     ' x_return_status = ' || x_return_status, l_debug_prefix);
10076               END IF;
10077               */
10078               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10079                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10080                  p_message=>'tenure_code should be in lookup HZ_TENURE_CODE. ' ||
10081                          ' x_return_status = ' || x_return_status,
10082                                   p_msg_level=>fnd_log.level_statement);
10083               END IF;
10084 
10085            ELSE
10086                  fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
10087                  fnd_message.set_token('COLUMN1', 'faculty_position_flag');
10088                  fnd_message.set_token('COLUMN2', 'tenure_code');
10089                  fnd_message.set_token('VALUE1', 'N');
10090                  fnd_message.set_token('VALUE2', 'null');
10091                  fnd_msg_pub.add;
10092                  x_return_status := fnd_api.g_ret_sts_error;
10093 
10094             END IF;
10095 
10096         /*IF g_debug THEN
10097         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10098         '(+) after validating tenure_code ... ' ||
10099         'x_return_status = ' || x_return_status, l_debug_prefix);
10100         END IF;
10101         */
10102         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10103            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validating tenure_code ... ' ||
10104                         'x_return_status = ' || x_return_status,
10105                                   p_msg_level=>fnd_log.level_statement);
10106          END IF;
10107 
10108         END IF;
10109 
10110         ------------------------------------
10111         -- validation for fraction_of_tenure
10112         ------------------------------------
10113 
10114         -- If fraction_of_tenure is passed, faculty_position_flag
10115         -- should be Y.
10116 
10117         IF p_employment_history_rec.fraction_of_tenure IS NOT NULL AND
10118                  p_employment_history_rec.fraction_of_tenure <> fnd_api.g_miss_num  then
10119                    IF temp_faculty_position_flag = 'Y' then
10120                  IF p_employment_history_rec.fraction_of_tenure < 0  OR
10121                     p_employment_history_rec.fraction_of_tenure > 100  THEN
10122 
10123                     fnd_message.set_name('AR', 'HZ_API_VALUE_BETWEEN');
10124                     fnd_message.set_token('COLUMN', 'fraction_of_tenure');
10125                     fnd_message.set_token('VALUE1', '0');
10126                     fnd_message.set_token('VALUE2', '100');
10127                     fnd_msg_pub.add;
10128                     x_return_status := fnd_api.g_ret_sts_error;
10129                  END IF;
10130 
10131                  /*IF g_debug THEN
10132                     hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10133                        'check that fraction_of_tenure is 0 to 100 value range. ' ||
10134                       ' x_return_status = ' || x_return_status, l_debug_prefix);
10135                  END IF;
10136                  */
10137                  IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10138                          hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10139                          p_message=>'check that fraction_of_tenure is 0 to 100 value range. ' ||
10140                                 ' x_return_status = ' || x_return_status,
10141                                   p_msg_level=>fnd_log.level_statement);
10142                  END IF;
10143 
10144          ELSE
10145                  fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
10146                  fnd_message.set_token('COLUMN1', 'faculty_position_flag');
10147                  fnd_message.set_token('COLUMN2', 'fraction_of_tenure');
10148                  fnd_message.set_token('VALUE1', 'N');
10149                  fnd_message.set_token('VALUE2', 'null');
10150 
10151                  fnd_message.set_token('COLUMN', 'fraction_of_tenure');
10152                  fnd_msg_pub.add;
10153                  x_return_status := fnd_api.g_ret_sts_error;
10154               END IF;
10155 
10156         END IF;
10157 
10158         /*IF g_debug THEN
10159         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10160         '(+) after validating fraction_of_tenure ... ' ||
10161         'x_return_status = ' || x_return_status, l_debug_prefix);
10162         END IF;
10163         */
10164         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10165            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validating fraction_of_tenure ... ' ||
10166                                         'x_return_status = ' || x_return_status,
10167                                   p_msg_level=>fnd_log.level_statement);
10168          END IF;
10169 
10170 
10171 
10172         ------------------------
10173         -- validation for status
10174         ------------------------
10175 /****Logical APIs - validation not required****/
10176   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10177         -- status is lookup code in lookup type REGISTRY_STATUS
10178         IF p_employment_history_rec.status IS NOT NULL
10179            AND
10180            p_employment_history_rec.status <> fnd_api.g_miss_char
10181            AND
10182            (p_create_update_flag = 'C'
10183             OR
10184             (p_create_update_flag = 'U'
10185              AND
10186              p_employment_history_rec.status <> NVL(l_status, fnd_api.g_miss_char)
10187            )
10188           )
10189         THEN
10190             validate_lookup (
10191                 p_column                                => 'status',
10192                 p_lookup_type                           => 'REGISTRY_STATUS',
10193                 p_column_value                          => p_employment_history_rec.status,
10194                 x_return_status                         => x_return_status);
10195 
10196             /*IF g_debug THEN
10197                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10198                     'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10199                     'x_return_status = ' || x_return_status, l_debug_prefix);
10200             END IF;
10201             */
10202             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10203                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10204                 p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10205                     'x_return_status = ' || x_return_status,
10206                                   p_msg_level=>fnd_log.level_statement);
10207              END IF;
10208 
10209 
10210         END IF;
10211   END IF;
10212 
10213         -- status cannot be set to null during update
10214         IF p_create_update_flag = 'U' THEN
10215             validate_cannot_update_to_null (
10216                 p_column                                => 'status',
10217                 p_column_value                          => p_employment_history_rec.status,
10218                 x_return_status                         => x_return_status);
10219         END IF;
10220 
10221 
10222         --------------------------------------
10223         -- validate created_by_module
10224         --------------------------------------
10225 
10226         validate_created_by_module(
10227           p_create_update_flag     => p_create_update_flag,
10228           p_created_by_module      => p_employment_history_rec.created_by_module,
10229           p_old_created_by_module  => l_created_by_module,
10230           x_return_status          => x_return_status);
10231 
10232         --------------------------------------
10233         -- validate application_id
10234         --------------------------------------
10235 
10236         validate_application_id(
10237           p_create_update_flag     => p_create_update_flag,
10238           p_application_id         => p_employment_history_rec.application_id,
10239           p_old_application_id     => l_application_id,
10240           x_return_status          => x_return_status);
10241 
10242         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10243                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_employment_history (-)',
10244                                p_msg_level=>fnd_log.level_procedure);
10245         END IF;
10246 
10247   END validate_employment_history;
10248 
10249 
10250 /**
10251    * PROCEDURE validate_work_class
10252    *
10253    * DESCRIPTION
10254    *     Validates work_class record. Checks for
10255    *         uniqueness
10256    *         mandatory columns
10257    *         non-updateable fields
10258    *         foreign key validations
10259    *
10260    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10261    *
10262    * ARGUMENTS
10263    *   IN:
10264    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
10265    *     p_work_class_rec               Work_class record.
10266    *     p_rowid                        Rowid of the record (used only in update mode).
10267    *   IN/OUT:
10268    *     x_return_status                Return status after the call. The status can
10269    *                                    be FND_API.G_RET_STS_SUCCESS (success),
10270    *                                    fnd_api.g_ret_sts_error (error),
10271    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
10272    *
10273    * NOTES
10274    *
10275    * MODIFICATION HISTORY
10276    *
10277    *   02-Feb-2003    Porkodi C         o Created.
10278    *   10-Mar-2003    Porkodi C           Bug 2829041, Corrected the validation for employment_history_id
10279    *                                      to be a foreign key from hz_employment_history.
10280    *
10281    */
10282 
10283     PROCEDURE validate_work_class(
10284         p_create_update_flag                    IN      VARCHAR2,
10285         p_work_class_rec                        IN      HZ_PERSON_INFO_V2PUB.WORK_CLASS_REC_TYPE,
10286         p_rowid                                 IN      ROWID ,
10287         x_return_status                         IN OUT NOCOPY  VARCHAR2
10288    ) IS
10289 
10290         l_count                                          NUMBER;
10291         l_work_class_id                                  NUMBER;
10292         l_dummy                                          VARCHAR2(1);
10293         l_employment_history_id                          NUMBER := p_work_class_rec.employment_history_id;
10294         l_created_by_module                              VARCHAR2(150);
10295         l_application_id                                 NUMBER;
10296         l_status                                         VARCHAR2(1);
10297         l_debug_prefix                                   VARCHAR2(30) := '';
10298 
10299         CURSOR work_class_cur (p_work_class_id IN NUMBER) IS
10300               SELECT 'Y'
10301               FROM   hz_work_class hc
10302         WHERE  hc.work_class_id = p_work_class_id;
10303 
10304     BEGIN
10305 
10306         --enable_debug;
10307 
10308         -- Debug info.
10309         /*IF g_debug THEN
10310             hz_utility_v2pub.debug ('validate_work_class (+)');
10311         END IF;
10312         */
10313         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10314                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_work_class (+)',
10315                                p_msg_level=>fnd_log.level_procedure);
10316         END IF;
10317 
10318         -- do the query to get old values for update
10319         IF p_create_update_flag = 'U'
10320         THEN
10321             SELECT WORK_CLASS_ID,
10322                    EMPLOYMENT_HISTORY_ID,
10323                    STATUS,
10324                    CREATED_BY_MODULE,
10325                    APPLICATION_ID
10326             INTO   L_work_class_id,
10327                    l_employment_history_id,
10328                    l_status,
10329                    l_created_by_module,
10330                    l_application_id
10331             FROM   HZ_work_class
10332             WHERE  ROWID = p_rowid;
10333         END IF;
10334 
10335 
10336         --------------------------------------
10337         -- validate work_class_id
10338         --------------------------------------
10339 /****Logical APIs - validation not required****/
10340   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10341         -- If primary key value is passed, check for uniqueness.
10342         -- If primary key value is not passed, it will be generated
10343         -- from sequence by table handler.
10344 
10345 
10346         IF p_create_update_flag = 'C' THEN
10347            IF p_work_class_rec.work_class_id IS NOT NULL AND
10348               p_work_class_rec.work_class_id <> fnd_api.g_miss_num
10349            THEN
10350               OPEN work_class_cur (p_work_class_rec.work_class_id);
10351               FETCH work_class_cur INTO l_dummy;
10352 
10353               -- key is not unique, push an error onto the stack.
10354               IF NVL(work_class_cur%FOUND, FALSE) THEN
10355                  fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
10356                  fnd_message.set_token('COLUMN', 'work_class_id');
10357                  fnd_msg_pub.add;
10358                  x_return_status := fnd_api.g_ret_sts_error;
10359               END IF;
10360               CLOSE work_class_cur;
10361 
10362               /*IF g_debug THEN
10363                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10364                     'check that work_class_id is unique during creation. ' ||
10365                     ' x_return_status = ' || x_return_status, l_debug_prefix);
10366               END IF;
10367               */
10368               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10369                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10370                  p_message=>'check that work_class_id is unique during creation. ' ||
10371                                                    ' x_return_status = ' || x_return_status,
10372                                   p_msg_level=>fnd_log.level_statement);
10373               END IF;
10374 
10375            END IF;
10376         END IF;
10377 
10378 
10379         -- work_class_id is non-updateable field
10380         IF p_create_update_flag = 'U' THEN
10381               validate_nonupdateable (
10382                   p_column                                => 'work_class_id',
10383                   p_column_value                          => p_work_class_rec.work_class_id,
10384                   p_old_column_value                      => l_work_class_id,
10385                   x_return_status                         => x_return_status);
10386 
10387               /*IF g_debug THEN
10388                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10389                     'work_class_id is non-updateable field. ' ||
10390                     'x_return_status = ' || x_return_status, l_debug_prefix);
10391               END IF;
10392               */
10393               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10394                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'work_class_id is non-updateable field. ' ||
10395                          'x_return_status = ' || x_return_status,
10396                                   p_msg_level=>fnd_log.level_statement);
10397               END IF;
10398 
10399         END IF;
10400 
10401         /*IF g_debug THEN
10402                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10403                 '(+) after validation of work_class_id ... ' ||
10404                 'x_return_status = ' || x_return_status, l_debug_prefix);
10405         END IF;
10406         */
10407         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10408            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validation of work_class_id ... ' ||
10409                                                 'x_return_status = ' || x_return_status,
10410                                   p_msg_level=>fnd_log.level_statement);
10411         END IF;
10412   END IF;
10413 
10414         ---------------------------------------
10415         -- validation for employment_history_id
10416         ---------------------------------------
10417 /****Logical APIs - validation not required****/
10418   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10419         -- employment_history_id is mandatory field
10420         IF p_create_update_flag = 'C' THEN
10421             validate_mandatory (
10422                 p_create_update_flag                    => p_create_update_flag,
10423                 p_column                                => 'employment_history_id',
10424                 p_column_value                          => p_work_class_rec.employment_history_id,
10425                 x_return_status                         => x_return_status);
10426 
10427             /*IF g_debug THEN
10428                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10429                     'employment_history_id is mandatory field. ' ||
10430                     'x_return_status = ' || x_return_status, l_debug_prefix);
10431             END IF;
10432             */
10433             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10434                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'employment_history_id is mandatory field. ' ||
10435                          'x_return_status = ' || x_return_status,
10436                                   p_msg_level=>fnd_log.level_statement);
10437             END IF;
10438 
10439 
10440         END IF;
10441 
10442         -- employment_history_id is non-updateable field
10443         IF p_create_update_flag = 'U' THEN
10444             validate_nonupdateable (
10445                 p_column                                => 'employment_history_id',
10446                 p_column_value                          => p_work_class_rec.employment_history_id,
10447                 p_old_column_value                      => l_employment_history_id,
10448                 x_return_status                         => x_return_status);
10449 
10450             /*IF g_debug THEN
10451                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10452                     'employment_history_id is non-updateable field. ' ||
10453                     'x_return_status = ' || x_return_status, l_debug_prefix);
10454             END IF;
10455             */
10456             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10457                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'employment_history_id is non-updateable field. ' ||
10458                         'x_return_status = ' || x_return_status,
10459                                   p_msg_level=>fnd_log.level_statement);
10460             END IF;
10461 
10462 
10463         END IF;
10464 
10465         -- employment_history_id has foreign key HZ_EMPLOYMENT_HISTORY.EMPLOYMENT_HISTORY_ID
10466         IF p_create_update_flag = 'C'
10467            AND
10468            p_work_class_rec.employment_history_id IS NOT NULL
10469            AND
10470            p_work_class_rec.employment_history_id <> fnd_api.g_miss_num
10471         THEN
10472             BEGIN
10473                 SELECT 'Y'
10474                 INTO   l_dummy
10475                 FROM   hz_employment_history p
10476                 WHERE  p.employment_history_id = p_work_class_rec.employment_history_id;
10477 
10478             EXCEPTION
10479                 WHEN NO_DATA_FOUND THEN
10480                     fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
10481                     fnd_message.set_token('FK', 'employment_history_id');
10482                     fnd_message.set_token('COLUMN', 'employment_history_id');
10483                     fnd_message.set_token('TABLE', 'hz_employment_history');
10484                     fnd_msg_pub.add;
10485                     x_return_status := fnd_api.g_ret_sts_error;
10486             END;
10487 
10488             /*IF g_debug THEN
10489                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10490                     'employment_history_id has foreign key hz_employment_history.employment_history_id. ' ||
10491                     'x_return_status = ' || x_return_status, l_debug_prefix);
10492             END IF;
10493             */
10494             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10495                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10496                 p_message=>'employment_history_id has foreign key hz_employment_history.employment_history_id. ' ||
10497                     'x_return_status = ' || x_return_status,
10498                                   p_msg_level=>fnd_log.level_statement);
10499             END IF;
10500 
10501 
10502         END IF;
10503   END IF;
10504 
10505         ---------------------------------
10506         -- validation for work_class_name
10507         ---------------------------------
10508 
10509         -- work_class_name is mandatory field
10510 
10511         validate_mandatory (
10512             p_create_update_flag                    => p_create_update_flag,
10513             p_column                                => 'work_class_name',
10514             p_column_value                          => p_work_class_rec.work_class_name,
10515             x_return_status                         => x_return_status);
10516 
10517         /*IF g_debug THEN
10518            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10519               'work_class_name is mandatory field. ' ||
10520               'x_return_status = ' || x_return_status, l_debug_prefix);
10521         END IF;
10522         */
10523         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10524            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'work_class_name is mandatory field. ' ||
10525               'x_return_status = ' || x_return_status,
10526                                   p_msg_level=>fnd_log.level_statement);
10527         END IF;
10528 
10529 
10530         ------------------------
10531         -- validation for status
10532         ------------------------
10533 /****Logical APIs - validation not required****/
10534   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10535         -- status is lookup code in lookup type REGISTRY_STATUS
10536         IF p_work_class_rec.status IS NOT NULL
10537            AND
10538            p_work_class_rec.status <> fnd_api.g_miss_char
10539            AND
10540            (p_create_update_flag = 'C'
10541             OR
10542             (p_create_update_flag = 'U'
10543              AND
10544              p_work_class_rec.status <> NVL(l_status, fnd_api.g_miss_char)
10545            )
10546           )
10547         THEN
10548             validate_lookup (
10549                 p_column                                => 'status',
10550                 p_lookup_type                           => 'REGISTRY_STATUS',
10551                 p_column_value                          => p_work_class_rec.status,
10552                 x_return_status                         => x_return_status);
10553 
10554             /*IF g_debug THEN
10555                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10556                     'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10557                     'x_return_status = ' || x_return_status, l_debug_prefix);
10558             END IF;
10559             */
10560             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10561                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10562                  p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10563                          'x_return_status = ' || x_return_status,
10564                                   p_msg_level=>fnd_log.level_statement);
10565             END IF;
10566 
10567 
10568         END IF;
10569   END IF;
10570 
10571         -- status cannot be set to null during update
10572         IF p_create_update_flag = 'U' THEN
10573             validate_cannot_update_to_null (
10574                 p_column                                => 'status',
10575                 p_column_value                          => p_work_class_rec.status,
10576                 x_return_status                         => x_return_status);
10577         END IF;
10578 
10579 
10580         --------------------------------------
10581         -- validate created_by_module
10582         --------------------------------------
10583 
10584         validate_created_by_module(
10585           p_create_update_flag     => p_create_update_flag,
10586           p_created_by_module      => p_work_class_rec.created_by_module,
10587           p_old_created_by_module  => l_created_by_module,
10588           x_return_status          => x_return_status);
10589 
10590         --------------------------------------
10591         -- validate application_id
10592         --------------------------------------
10593 
10594         validate_application_id(
10595           p_create_update_flag     => p_create_update_flag,
10596           p_application_id         => p_work_class_rec.application_id,
10597           p_old_application_id     => l_application_id,
10598           x_return_status          => x_return_status);
10599 
10600         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10601                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_work_class (-)',
10602                                p_msg_level=>fnd_log.level_procedure);
10603         END IF;
10604 
10605   END validate_work_class;
10606 
10607 /**
10608    * PROCEDURE validate_person_interest
10609    *
10610    * DESCRIPTION
10611    *     Validates person_interest record. Checks for
10612    *         uniqueness
10613    *         lookup types
10614    *         mandatory columns
10615    *         non-updateable fields
10616    *         foreign key validations
10617    *         other validations
10618    *
10619    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
10620    *
10621    * ARGUMENTS
10622    *   IN:
10623    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
10624    *     p_person_interest_rec       person_interest record.
10625    *     p_rowid                        Rowid of the record (used only in update mode).
10626    *   IN/OUT:
10627    *     x_return_status                Return status after the call. The status can
10628    *                                    be FND_API.G_RET_STS_SUCCESS (success),
10629    *                                    fnd_api.g_ret_sts_error (error),
10630    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
10631    *
10632    * NOTES
10633    *
10634    * MODIFICATION HISTORY
10635    *
10636    *   31-Jan-2001    Porkodi C           o Created.
10637    *   13-Jan-2004    Rajib Ranjan Borah  o Bug 3282946.Person interest can be created for
10638    *                                        all type of parties and not necessarily for
10639    *                                        'PERSON' type parties only.
10640    */
10641 
10642     PROCEDURE validate_person_interest(
10643         p_create_update_flag                    IN      VARCHAR2,
10644         p_person_interest_rec                   IN      HZ_PERSON_INFO_V2PUB.person_interest_REC_TYPE,
10645         p_rowid                                 IN      ROWID ,
10646         x_return_status                         IN OUT NOCOPY  VARCHAR2
10647    ) IS
10648 
10649         l_count                                          NUMBER;
10650         l_person_interest_id                          NUMBER;
10651         l_dummy                                          VARCHAR2(1);
10652         l_party_id                                       NUMBER := p_person_interest_rec.party_id;
10653         l_created_by_module                              VARCHAR2(150);
10654         l_application_id                                 NUMBER;
10655         l_status                                         VARCHAR2(1);
10656         l_debug_prefix                                   VARCHAR2(30) := '';
10657         l_begin_date                                     DATE;
10658         l_end_date                                       DATE;
10659 
10660         CURSOR person_interest_cur (p_person_interest_id IN NUMBER) IS
10661               SELECT 'Y'
10662               FROM   hz_person_interest hc
10663         WHERE  hc.person_interest_id = p_person_interest_id;
10664 
10665     BEGIN
10666 
10667         --enable_debug;
10668 
10669         -- Debug info.
10670         /*IF g_debug THEN
10671             hz_utility_v2pub.debug ('validate_person_interest (+)');
10672         END IF;
10673         */
10674         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10675                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_person_interest (+)',
10676                                p_msg_level=>fnd_log.level_procedure);
10677         END IF;
10678 
10679 
10680         -- do the query to get old values for update
10681         IF p_create_update_flag = 'U'
10682         THEN
10683             SELECT person_interest_ID,
10684                    PARTY_ID,
10685                    STATUS,
10686                    CREATED_BY_MODULE,
10687                    APPLICATION_ID
10688             INTO   l_person_interest_id,
10689                    l_party_id,
10690                    l_status,
10691                    l_created_by_module,
10692                    l_application_id
10693             FROM   HZ_person_interest
10694             WHERE  ROWID = p_rowid;
10695         END IF;
10696 
10697 
10698         --------------------------------------
10699         -- validate person_interest_id
10700         --------------------------------------
10701 /****Logical APIs - validation not required****/
10702   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10703         -- If primary key value is passed, check for uniqueness.
10704         -- If primary key value is not passed, it will be generated
10705         -- from sequence by table handler.
10706 
10707 
10708         IF p_create_update_flag = 'C' THEN
10709            IF p_person_interest_rec.person_interest_id IS NOT NULL AND
10710               p_person_interest_rec.person_interest_id <> fnd_api.g_miss_num
10711            THEN
10712               OPEN person_interest_cur (p_person_interest_rec.person_interest_id);
10713               FETCH person_interest_cur INTO l_dummy;
10714 
10715               -- key is not unique, push an error onto the stack.
10716               IF NVL(person_interest_cur%FOUND, FALSE) THEN
10717                  fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
10718                  fnd_message.set_token('COLUMN', 'person_interest_id');
10719                  fnd_msg_pub.add;
10720                  x_return_status := fnd_api.g_ret_sts_error;
10721               END IF;
10722               CLOSE person_interest_cur;
10723 
10724               /*IF g_debug THEN
10725                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10726                     'check that person_interest_id is unique during creation. ' ||
10727                     ' x_return_status = ' || x_return_status, l_debug_prefix);
10728               END IF;
10729               */
10730               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10731                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10732                 p_message=>'check that person_interest_id is unique during creation. ' ||
10733                     ' x_return_status = ' || x_return_status,
10734                                   p_msg_level=>fnd_log.level_statement);
10735               END IF;
10736 
10737            END IF;
10738         END IF;
10739 
10740 
10741         -- person_interest_id is non-updateable field
10742         IF p_create_update_flag = 'U' THEN
10743               validate_nonupdateable (
10744                   p_column                                => 'person_interest_id',
10745                   p_column_value                          => p_person_interest_rec.person_interest_id,
10746                   p_old_column_value                      => l_person_interest_id,
10747                   x_return_status                         => x_return_status);
10748 
10749               /*IF g_debug THEN
10750                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10751                     'person_interest_id is non-updateable field. ' ||
10752                     'x_return_status = ' || x_return_status, l_debug_prefix);
10753               END IF;
10754               */
10755               IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10756                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'person_interest_id is non-updateable field. ' ||
10757                         'x_return_status = ' || x_return_status,
10758                                   p_msg_level=>fnd_log.level_statement);
10759               END IF;
10760 
10761         END IF;
10762 
10763         /*IF g_debug THEN
10764                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10765                 '(+) after validation of person_interest_id ... ' ||
10766                 'x_return_status = ' || x_return_status, l_debug_prefix);
10767         END IF;
10768         */
10769         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10770            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validation of person_interest_id ... ' ||
10771                                 'x_return_status = ' || x_return_status,
10772                                   p_msg_level=>fnd_log.level_statement);
10773         END IF;
10774   END IF;
10775 
10776         --------------------------
10777         -- validation for party_id
10778         --------------------------
10779 /****Logical APIs - validation not required****/
10780   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10781         -- party_id is mandatory field
10782         IF p_create_update_flag = 'C' THEN
10783             validate_mandatory (
10784                 p_create_update_flag                    => p_create_update_flag,
10785                 p_column                                => 'party_id',
10786                 p_column_value                          => p_person_interest_rec.party_id,
10787                 x_return_status                         => x_return_status);
10788 
10789             /*IF g_debug THEN
10790                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10791                     'party_id is mandatory field. ' ||
10792                     'x_return_status = ' || x_return_status, l_debug_prefix);
10793             END IF;
10794             */
10795             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10796                    hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
10797                         'x_return_status = ' || x_return_status,
10798                                   p_msg_level=>fnd_log.level_statement);
10799             END IF;
10800 
10801 
10802         END IF;
10803 
10804         -- party_id is non-updateable field
10805         IF p_create_update_flag = 'U' THEN
10806             validate_nonupdateable (
10807                 p_column                                => 'party_id',
10808                 p_column_value                          => p_person_interest_rec.party_id,
10809                 p_old_column_value                      => l_party_id,
10810                 x_return_status                         => x_return_status);
10811 
10812             /*IF g_debug THEN
10813                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10814                     'party_id is non-updateable field. ' ||
10815                     'x_return_status = ' || x_return_status, l_debug_prefix);
10816             END IF;
10817             */
10818             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10819                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
10820                                         'x_return_status = ' || x_return_status,
10821                                   p_msg_level=>fnd_log.level_statement);
10822             END IF;
10823 
10824 
10825         END IF;
10826 
10827         -- party_id has foreign key HZ_PARTIES.PARTY_ID
10828         IF p_create_update_flag = 'C'
10829            AND
10830            p_person_interest_rec.party_id IS NOT NULL
10831            AND
10832            p_person_interest_rec.party_id <> fnd_api.g_miss_num
10833         THEN
10834             BEGIN
10835                 SELECT 'Y'
10836                 INTO   l_dummy
10837                 FROM   hz_parties p
10838                 WHERE  p.party_id = p_person_interest_rec.party_id; /*and
10839                        party_type = 'PERSON';*/
10840                        /*
10841                        Bug 3282946. Some teams still insert into hz_person_interest
10842                        for non 'PERSON' type parties.
10843                        */
10844 
10845             EXCEPTION
10846                 WHEN NO_DATA_FOUND THEN
10847                     fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
10848                     fnd_message.set_token('FK', 'party_id');
10849                     fnd_message.set_token('COLUMN', 'party_id');
10850                     fnd_message.set_token('TABLE', 'hz_parties');
10851                     fnd_msg_pub.add;
10852                     x_return_status := fnd_api.g_ret_sts_error;
10853             END;
10854 
10855             /*IF g_debug THEN
10856                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10857                     'party_id has foreign key hz_parties.party_id. ' ||
10858                     'x_return_status = ' || x_return_status, l_debug_prefix);
10859             END IF;
10860             */
10861             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10862                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
10863                         'x_return_status = ' || x_return_status,
10864                                   p_msg_level=>fnd_log.level_statement);
10865             END IF;
10866 
10867 
10868         END IF;
10869   END IF;
10870 
10871         ---------------------------------
10872         -- validation for sport_indicator
10873         ---------------------------------
10874 /****Logical APIs - validation not required****/
10875   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10876         -- sport_indicator is mandatory field
10877 
10878 
10879         -- sport_indicator is validated against lookup type YES/NO
10880         validate_lookup (
10881             p_column                                => 'sport_indicator',
10882             p_lookup_type                           => 'YES/NO',
10883             p_column_value                          => p_person_interest_rec.sport_indicator,
10884             x_return_status                         => x_return_status);
10885 
10886 
10887         /*IF g_debug THEN
10888             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10889                 'sport_indicator should be in lookup YES/NO. ' ||
10890                 'x_return_status = ' || x_return_status, l_debug_prefix);
10891         END IF;
10892         */
10893         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10894            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'sport_indicator should be in lookup YES/NO. ' ||
10895                 'x_return_status = ' || x_return_status,
10896                                   p_msg_level=>fnd_log.level_statement);
10897         END IF;
10898   END IF;
10899 
10900         ---------------------------------
10901         -- validation for interest_name
10902         ---------------------------------
10903 
10904         -- interest_name is mandatory field
10905 
10906         validate_mandatory (
10907             p_create_update_flag                    => p_create_update_flag,
10908             p_column                                => 'interest_name',
10909             p_column_value                          => p_person_interest_rec.interest_name,
10910             x_return_status                         => x_return_status);
10911 
10912         /*IF g_debug THEN
10913            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10914               'interest_name is mandatory field. ' ||
10915               'x_return_status = ' || x_return_status, l_debug_prefix);
10916         END IF;
10917         */
10918         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10919            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'interest_name is mandatory field. ' ||
10920                                         'x_return_status = ' || x_return_status,
10921                                   p_msg_level=>fnd_log.level_statement);
10922         END IF;
10923 
10924 
10925         ------------------------
10926         -- validation for status
10927         ------------------------
10928 /****Logical APIs - validation not required****/
10929   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
10930         -- status is lookup code in lookup type REGISTRY_STATUS
10931         IF p_person_interest_rec.status IS NOT NULL
10932            AND
10933            p_person_interest_rec.status <> fnd_api.g_miss_char
10934            AND
10935            (p_create_update_flag = 'C'
10936             OR
10937             (p_create_update_flag = 'U'
10938              AND
10939              p_person_interest_rec.status <> NVL(l_status, fnd_api.g_miss_char)
10940            )
10941           )
10942         THEN
10943             validate_lookup (
10944                 p_column                                => 'status',
10945                 p_lookup_type                           => 'REGISTRY_STATUS',
10946                 p_column_value                          => p_person_interest_rec.status,
10947                 x_return_status                         => x_return_status);
10948 
10949             /*IF g_debug THEN
10950                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10951                     'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10952                     'x_return_status = ' || x_return_status, l_debug_prefix);
10953             END IF;
10954             */
10955             IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
10956                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
10957                 p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
10958                                                 'x_return_status = ' || x_return_status,
10959                                   p_msg_level=>fnd_log.level_statement);
10960             END IF;
10961 
10962 
10963         END IF;
10964   END IF;
10965 
10966         -- status cannot be set to null during update
10967         IF p_create_update_flag = 'U' THEN
10968             validate_cannot_update_to_null (
10969                 p_column                                => 'status',
10970                 p_column_value                          => p_person_interest_rec.status,
10971                 x_return_status                         => x_return_status);
10972         END IF;
10973 
10974 
10975         --------------------------------------
10976         -- validate created_by_module
10977         --------------------------------------
10978 
10979         validate_created_by_module(
10980           p_create_update_flag     => p_create_update_flag,
10981           p_created_by_module      => p_person_interest_rec.created_by_module,
10982           p_old_created_by_module  => l_created_by_module,
10983           x_return_status          => x_return_status);
10984 
10985         --------------------------------------
10986         -- validate application_id
10987         --------------------------------------
10988 
10989         validate_application_id(
10990           p_create_update_flag     => p_create_update_flag,
10991           p_application_id         => p_person_interest_rec.application_id,
10992           p_old_application_id     => l_application_id,
10993           x_return_status          => x_return_status);
10994 
10995         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
10996                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_person_interest (-)',
10997                                p_msg_level=>fnd_log.level_procedure);
10998         END IF;
10999 
11000   END validate_person_interest;
11001 
11002 
11003   /**
11004    * PROCEDURE validate_location
11005    *
11006    * DESCRIPTION
11007    *     Validates location record. Checks for
11008    *         uniqueness
11009    *         lookup types
11010    *         mandatory columns
11011    *         non-updateable fields
11012    *         foreign key validations
11013    *         other validations
11014    *
11015    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
11016    *
11017    * ARGUMENTS
11018    *   IN:
11019    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
11020    *     p_location_rec                 Location record.
11021    *     p_rowid                        Rowid of the record (used only in update mode).
11022    *   IN/OUT:
11023    *     x_return_status                Return status after the call. The status can
11024    *                                    be FND_API.G_RET_STS_SUCCESS (success),
11025    *                                    fnd_api.g_ret_sts_error (error),
11026    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
11027    *
11028    * NOTES
11029    *
11030    * MODIFICATION HISTORY
11031    *
11032    *   07-23-2001    Indrajit Sen       o Created.
11033    *   06-FEB-2004   Jianying Huang     o Bug 3330754: modified validate_location to
11034    *                                      change validation for third party records
11035    *                                      from row level non-updateable checking to
11036    *                                      attribute level checking.
11037    *   01-03-2005    Rajib Ranjan Borah o SSM SST Integration and Extension.
11038    *                                      Newly created user update rules will be used
11039    *                                      to check update privilege.
11040    *
11041    */
11042 
11043   PROCEDURE validate_location(
11044       p_create_update_flag                    IN      VARCHAR2,
11045       p_location_rec                          IN      hz_location_v2pub.location_rec_type,
11046       p_rowid                                 IN      ROWID ,
11047       x_return_status                         IN OUT NOCOPY  VARCHAR2
11048  ) IS
11049 
11050       l_dummy                                 VARCHAR2(1);
11051       l_address_effective_date                DATE;
11052       l_content_source_type                   HZ_LOCATIONS.CONTENT_SOURCE_TYPE%TYPE;
11053       l_created_by_module                     VARCHAR2(150);
11054       l_application_id                        NUMBER;
11055       l_debug_prefix                          VARCHAR2(30) := '';
11056 
11057       -- Bug 2197181: added for mix-n-match
11058       db_actual_content_source                HZ_LOCATIONS.ACTUAL_CONTENT_SOURCE%TYPE;
11059 
11060       -- Bug 3330754: added to support attribute level non-updateable checking for third
11061       -- party records.
11062       db_orig_system_reference                HZ_LOCATIONS.ORIG_SYSTEM_REFERENCE%TYPE;
11063       db_country                              HZ_LOCATIONS.COUNTRY%TYPE;
11064       db_address1                             HZ_LOCATIONS.ADDRESS1%TYPE;
11065       db_address2                             HZ_LOCATIONS.ADDRESS2%TYPE;
11066       db_address3                             HZ_LOCATIONS.ADDRESS3%TYPE;
11067       db_address4                             HZ_LOCATIONS.ADDRESS4%TYPE;
11068       db_city                                 HZ_LOCATIONS.CITY%TYPE;
11069       db_postal_code                          HZ_LOCATIONS.POSTAL_CODE%TYPE;
11070       db_state                                HZ_LOCATIONS.STATE%TYPE;
11071       db_province                             HZ_LOCATIONS.PROVINCE%TYPE;
11072       db_county                               HZ_LOCATIONS.COUNTY%TYPE;
11073       db_postal_plus4_code                    HZ_LOCATIONS.POSTAL_PLUS4_CODE%TYPE;
11074       db_clli_code                            HZ_LOCATIONS.CLLI_CODE%TYPE;
11075       db_delivery_point_code                  HZ_LOCATIONS.DELIVERY_POINT_CODE%TYPE;
11076       db_location_directions                  HZ_LOCATIONS.LOCATION_DIRECTIONS%TYPE;
11077       l_return_status                         VARCHAR2(1);
11078 
11079       l_vertex_taxware_installed              BOOLEAN;
11080 
11081   BEGIN
11082 
11083       --enable_debug;
11084 
11085       -- Debug info.
11086       /*IF g_debug THEN
11087           hz_utility_v2pub.debug ('validate_location (+)');
11088       END IF;
11089       */
11090       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
11091         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_location (+)',
11092                                p_msg_level=>fnd_log.level_procedure);
11093       END IF;
11094 
11095 
11096       -- select columns needed to be checked from table during update
11097 
11098       -- Bug 2197181: selecting actual_content_source for mix-n-match
11099       -- Bug 3330754: added to support attribute level non-updateable checking for third
11100       -- party records.
11101 
11102       IF (p_create_update_flag = 'U') THEN
11103           SELECT ADDRESS_EFFECTIVE_DATE,
11104                  CONTENT_SOURCE_TYPE,
11105                  created_by_module,
11106                  APPLICATION_ID,
11107                  actual_content_source,
11108                  -- Bug 3330754: added to support attribute level
11109                  -- non-updateable checking for third party records.
11110                  orig_system_reference,
11111                  country,
11112                  address1,
11113                  address2,
11114                  address3,
11115                  address4,
11116                  city,
11117                  postal_code,
11118                  state,
11119                  province,
11120                  county,
11121                  postal_plus4_code,
11122                  clli_code,
11123                  delivery_point_code,
11124                  location_directions
11125           INTO   l_address_effective_date,
11126                  l_content_source_type,
11127                  l_created_by_module,
11128                  l_application_id,
11129                  db_actual_content_source,
11130                  -- Bug 3330754: added to support attribute level
11131                  -- non-updateable checking for third party records.
11132                  db_orig_system_reference,
11133                  db_country,
11134                  db_address1,
11135                  db_address2,
11136                  db_address3,
11137                  db_address4,
11138                  db_city,
11139                  db_postal_code,
11140                  db_state,
11141                  db_province,
11142                  db_county,
11143                  db_postal_plus4_code,
11144                  db_clli_code,
11145                  db_delivery_point_code,
11146                  db_location_directions
11147           FROM   HZ_LOCATIONS
11148           WHERE  ROWID = p_rowid;
11149       END IF;
11150 
11151       --------------------
11152       -- validate address1
11153       --------------------
11154 
11155       -- address1 is mandatory
11156       validate_mandatory (
11157           p_create_update_flag                    => p_create_update_flag,
11158           p_column                                => 'address1',
11159           p_column_value                          => p_location_rec.address1,
11160           x_return_status                         => x_return_status);
11161 
11162       --------------------
11163       -- validate country
11164       --------------------
11165 
11166       -- country is mandatory
11167       validate_mandatory (
11168           p_create_update_flag                    => p_create_update_flag,
11169           p_column                                => 'country',
11170           p_column_value                          => p_location_rec.country,
11171           x_return_status                         => x_return_status);
11172 
11173       -- country has foreign key fnd_territories.territory_code
11174       validate_country_code(
11175           p_column                                => 'country',
11176           p_column_value                          => p_location_rec.country,
11177           x_return_status                         => x_return_status);
11178 
11179       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11180           hz_utility_v2pub.debug(
11181              p_prefix               => l_debug_prefix,
11182              p_message              => 'country has foreign key fnd_territories.territory_code. ' ||
11183                                        'x_return_status = ' || x_return_status,
11184              p_msg_level            => fnd_log.level_statement);
11185       END IF;
11186 
11187       /* Bug 2197181: removed content_source_type validation as this
11188          column has been obsoleted for mix-n-match project.
11189 
11190       -------------------------------
11191       -- validate content_source_type
11192       -------------------------------
11193 
11194       -- we do not need to check 'content_source_type is mandatory' because
11195       -- we default content_source_type to hz_party_v2pub.g_miss_content_source_type
11196       -- in table handler.
11197 
11198       -- content_source_type is non-updateable
11199       IF p_create_update_flag = 'U' THEN
11200           validate_nonupdateable (
11201               p_column                                => 'content_source_type',
11202               p_column_value                          => p_location_rec.content_source_type,
11203               p_old_column_value                      => l_content_source_type,
11204               x_return_status                         => x_return_status);
11205 
11206 
11207           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11208            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'content_source_type is non-updateable. ' ||
11209                                         'x_return_status = ' || x_return_status,
11210                                   p_msg_level=>fnd_log.level_statement);
11211          END IF;
11212       END IF;
11213 
11214       -- content_source_type is lookup code in lookup type CONTENT_SOURCE_TYPE
11215       validate_lookup (
11216           p_column                                => 'content_source_type',
11217           p_lookup_type                           => 'CONTENT_SOURCE_TYPE',
11218           p_column_value                          => p_location_rec.content_source_type,
11219           x_return_status                         => x_return_status);
11220 
11221       IF g_debug THEN
11222           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
11223               'content_source_type is lookup code in lookup type CONTENT_SOURCE_TYPE. ' ||
11224               'x_return_status = ' || x_return_status, l_debug_prefix);
11225       END IF;
11226       */
11227 
11228       -- Bug 2197181: Added validation for mix-n-match
11229 
11230       ----------------------------------------
11231       -- validate content_source_type and actual_content_source_type
11232       ----------------------------------------
11233 
11234       HZ_MIXNM_UTILITY.ValidateContentSource (
11235         p_api_version                       => 'V2',
11236         p_create_update_flag                => p_create_update_flag,
11237         -- Bug 3330754: replaced row level non-updateable checking to
11238         -- attribute level checking.
11239         p_check_update_privilege            => 'N',
11240         p_content_source_type               => p_location_rec.content_source_type,
11241         p_old_content_source_type           => l_content_source_type,
11242         p_actual_content_source             => p_location_rec.actual_content_source,
11243         p_old_actual_content_source         => db_actual_content_source,
11244         p_entity_name                       => 'HZ_LOCATIONS',
11245         x_return_status                     => x_return_status );
11246 
11247       -- Bug 3330754: added to support attribute level non-updateable checking for third
11248       -- party records.
11249 
11250       --------------------------------------
11251       -- validate address components which are third-party sourced.
11252       --------------------------------------
11253 
11254       -- address components can not be updated by the end-user if
11255       -- actual_content_source <> 'USER_ENTERED'
11256 
11257       IF p_create_update_flag = 'U' AND
11258          db_actual_content_source <> 'USER_ENTERED' -- AND
11259          -- SSM SST Integration and Extension
11260          -- Check Updateability using mix-n-match procedure rather than checking the
11261          -- profile value.
11262          /*NVL(FND_PROFILE.value('HZ_UPDATE_THIRD_PARTY_DATA'), 'N') = 'N'*/
11263          --HZ_UTILITY_V2PUB.is_purchased_content_source(db_actual_content_source) = 'Y'
11264       THEN
11265         l_return_status := FND_API.G_RET_STS_SUCCESS;
11266 
11267         validate_nonupdateable (
11268           p_column                 => 'orig_system_reference',
11269           p_column_value           => p_location_rec.orig_system_reference,
11270           p_old_column_value       => db_orig_system_reference,
11271           x_return_status          => l_return_status,
11272           p_raise_error            => 'N');
11273 
11274         validate_nonupdateable (
11275           p_column                 => 'country',
11276           p_column_value           => p_location_rec.country,
11277           p_old_column_value       => db_country,
11278           x_return_status          => l_return_status,
11279           p_raise_error            => 'N');
11280 
11281         validate_nonupdateable (
11282           p_column                 => 'address1',
11283           p_column_value           => p_location_rec.address1,
11284           p_old_column_value       => db_address1,
11285           x_return_status          => l_return_status,
11286           p_raise_error            => 'N');
11287 
11288         validate_nonupdateable (
11289           p_column                 => 'address2',
11290           p_column_value           => p_location_rec.address2,
11291           p_old_column_value       => db_address2,
11292           x_return_status          => l_return_status,
11293           p_raise_error            => 'N');
11294 
11295         validate_nonupdateable (
11296           p_column                 => 'address3',
11297           p_column_value           => p_location_rec.address3,
11298           p_old_column_value       => db_address3,
11299           x_return_status          => l_return_status,
11300           p_raise_error            => 'N');
11301 
11302         validate_nonupdateable (
11303           p_column                 => 'address4',
11304           p_column_value           => p_location_rec.address4,
11305           p_old_column_value       => db_address4,
11306           x_return_status          => l_return_status,
11307           p_raise_error            => 'N');
11308 
11309         validate_nonupdateable (
11310           p_column                 => 'city',
11311           p_column_value           => p_location_rec.city,
11312           p_old_column_value       => db_city,
11313           x_return_status          => l_return_status,
11314           p_raise_error            => 'N');
11315 
11316         validate_nonupdateable (
11317           p_column                 => 'postal_code',
11318           p_column_value           => p_location_rec.postal_code,
11319           p_old_column_value       => db_postal_code,
11320           x_return_status          => l_return_status,
11321           p_raise_error            => 'N');
11322 
11323         validate_nonupdateable (
11324           p_column                 => 'state',
11325           p_column_value           => p_location_rec.state,
11326           p_old_column_value       => db_state,
11327           x_return_status          => l_return_status,
11328           p_raise_error            => 'N');
11329 
11330         validate_nonupdateable (
11331           p_column                 => 'province',
11332           p_column_value           => p_location_rec.province,
11333           p_old_column_value       => db_province,
11334           x_return_status          => l_return_status,
11335           p_raise_error            => 'N');
11336 
11337         validate_nonupdateable (
11338           p_column                 => 'county',
11339           p_column_value           => p_location_rec.county,
11340           p_old_column_value       => db_county,
11341           x_return_status          => l_return_status,
11342           p_raise_error            => 'N');
11343 
11344         validate_nonupdateable (
11345           p_column                 => 'postal_plus4_code',
11346           p_column_value           => p_location_rec.postal_plus4_code,
11347           p_old_column_value       => db_postal_plus4_code,
11348           x_return_status          => l_return_status,
11349           p_raise_error            => 'N');
11350 
11351         validate_nonupdateable (
11352           p_column                 => 'clli_code',
11353           p_column_value           => p_location_rec.clli_code,
11354           p_old_column_value       => db_clli_code,
11355           x_return_status          => l_return_status,
11356           p_raise_error            => 'N');
11357 
11358         validate_nonupdateable (
11359           p_column                 => 'delivery_point_code',
11360           p_column_value           => p_location_rec.delivery_point_code,
11361           p_old_column_value       => db_delivery_point_code,
11362           x_return_status          => l_return_status,
11363           p_raise_error            => 'N');
11364 
11365         validate_nonupdateable (
11366           p_column                 => 'location_directions',
11367           p_column_value           => p_location_rec.location_directions,
11368           p_old_column_value       => db_location_directions,
11369           x_return_status          => l_return_status,
11370           p_raise_error            => 'N');
11371 
11372         IF l_return_status <> FND_API.G_RET_STS_SUCCESS THEN
11373 
11374             HZ_MIXNM_UTILITY.CheckUserUpdatePrivilege(
11375                 p_actual_content_source       => db_actual_content_source,
11376                 p_new_actual_content_source   => p_location_rec.actual_content_source,
11377                 p_entity_name                 => 'HZ_LOCATIONS',
11378                 x_return_status               => x_return_status);
11379 -- Bug 4693719 : set global variable to Y
11380          HZ_UTILITY_V2PUB.G_UPDATE_ACS := 'Y';
11381         /*
11382           FND_MESSAGE.SET_NAME('AR', 'HZ_NOTALLOW_UPDATE_THIRD_PARTY');
11383           FND_MSG_PUB.ADD;
11384           x_return_status := FND_API.G_RET_STS_ERROR;
11385         */
11386         END IF;
11387 
11388         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11389           hz_utility_v2pub.debug(
11390             p_prefix=>l_debug_prefix,
11391             p_message=>'third party address components are non-updateable. ' ||
11392                        'x_return_status = ' || x_return_status,
11393             p_msg_level=>fnd_log.level_statement);
11394         END IF;
11395       END IF;
11396 
11397       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11398         hz_utility_v2pub.debug(
11399           p_prefix=>l_debug_prefix,
11400           p_message=>'(+) after validate third party address components ... ' ||
11401                      'x_return_status = ' || x_return_status,
11402           p_msg_level=>fnd_log.level_statement);
11403       END IF;
11404 
11405       --------------------------
11406       -- validation for language
11407       --------------------------
11408       -- language has foreign key fnd_languages.language_code
11409       IF p_location_rec.language IS NOT NULL
11410          AND
11411          p_location_rec.language <> fnd_api.g_miss_char
11412       THEN
11413           BEGIN
11414               SELECT 'Y'
11415               INTO   l_dummy
11416               FROM   FND_LANGUAGES
11417               WHERE  LANGUAGE_CODE = p_location_rec.language
11418               AND    INSTALLED_FLAG IN ('B', 'I');
11419           EXCEPTION
11420               WHEN NO_DATA_FOUND THEN
11421                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
11422                   fnd_message.set_token('FK', 'language');
11423                   fnd_message.set_token('COLUMN', 'language_code');
11424                   fnd_message.set_token('TABLE', 'fnd_languages(installed)');
11425                   fnd_msg_pub.add;
11426                   x_return_status := fnd_api.g_ret_sts_error;
11427           END;
11428 
11429           /*IF g_debug THEN
11430               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
11431                   'language has foreign key fnd_languages.language_code (installed). ' ||
11432                   'x_return_status = ' || x_return_status, l_debug_prefix);
11433           END IF;
11434           */
11435           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11436             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
11437             p_message=>'language has foreign key fnd_languages.language_code (installed). ' ||
11438                         'x_return_status = ' || x_return_status,
11439                                   p_msg_level=>fnd_log.level_statement);
11440          END IF;
11441       END IF;
11442 
11443       -----------------------------
11444       -- validation for timezone_id
11445       -----------------------------
11446       -- timezone_id has foreign key hz_timezones.timezone_id
11447       IF p_location_rec.timezone_id IS NOT NULL
11448          AND
11449          p_location_rec.timezone_id <> fnd_api.g_miss_num
11450       THEN
11451           BEGIN
11452               SELECT 'Y'
11453               INTO   l_dummy
11454               FROM   HZ_TIMEZONES
11455               WHERE  TIMEZONE_ID = p_location_rec.timezone_id;
11456           EXCEPTION
11457               WHEN NO_DATA_FOUND THEN
11458                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
11459                   fnd_message.set_token('FK', 'timezone_id');
11460                   fnd_message.set_token('COLUMN', 'timezone_id');
11461                   fnd_message.set_token('TABLE', 'hz_timezones');
11462                   fnd_msg_pub.add;
11463                   x_return_status := fnd_api.g_ret_sts_error;
11464           END;
11465 
11466           /*IF g_debug THEN
11467               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
11468                   'timezone_id has foreign key hz_timezones.timezone_id. ' ||
11469                   'x_return_status = ' || x_return_status, l_debug_prefix);
11470           END IF;
11471           */
11472           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11473                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
11474                 p_message=>'timezone_id has foreign key hz_timezones.timezone_id. ' ||
11475                   'x_return_status = ' || x_return_status,
11476                                   p_msg_level=>fnd_log.level_statement);
11477           END IF;
11478       END IF;
11479 
11480       --------------------------------------
11481       -- validate created_by_module
11482       --------------------------------------
11483 
11484       validate_created_by_module(
11485         p_create_update_flag     => p_create_update_flag,
11486         p_created_by_module      => p_location_rec.created_by_module,
11487         p_old_created_by_module  => l_created_by_module,
11488         x_return_status          => x_return_status);
11489 
11490       --------------------------------------
11491       -- validate application_id
11492       --------------------------------------
11493 
11494       validate_application_id(
11495         p_create_update_flag     => p_create_update_flag,
11496         p_application_id         => p_location_rec.application_id,
11497         p_old_application_id     => l_application_id,
11498         x_return_status          => x_return_status);
11499 
11500       --------------------------------------------------------------
11501       -- validate sales_tax_geocode and sales_tax_inside_city_limits
11502       --------------------------------------------------------------
11503       -- Added the below validations as a part of bug fix # 4967075
11504 
11505       l_vertex_taxware_installed := zx_r11i_tax_partner_pkg.TAX_VENDOR_EXTENSION;
11506 
11507       IF p_location_rec.sales_tax_geocode IS NOT NULL AND p_location_rec.sales_tax_geocode <> fnd_api.g_miss_char THEN
11508          If (zx_r11i_tax_partner_pkg.IS_GEOCODE_VALID(p_location_rec.sales_tax_geocode) = FALSE) then
11509             x_return_status := fnd_api.g_ret_sts_error;
11510          end if;
11511       END IF;
11512 
11513       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
11514          If (zx_r11i_tax_partner_pkg.IS_CITY_LIMIT_VALID(p_location_rec.sales_tax_inside_city_limits) = FALSE) then
11515             x_return_status := fnd_api.g_ret_sts_error;
11516          end if;
11517       END IF;
11518 
11519       --------------------------
11520       -- tax location validation
11521       --------------------------
11522 
11523       -- do tax location validation when location is inserted from public API.
11524       -- restrict updates on taxable components when location is used by any
11525       -- non prospect customers.
11526       -- tax code will be created when customer account site is created for
11527       -- this location.
11528 
11529       tax_location_validation(p_location_rec,
11530                                p_create_update_flag,
11531                                x_return_status);
11532 
11533       IF x_return_status = fnd_api.g_ret_sts_error THEN
11534           RAISE FND_API.G_EXC_ERROR;
11535       END IF;
11536 
11537       -- Debug info.
11538       /*IF g_debug THEN
11539           hz_utility_v2pub.debug ('validate_location (-)');
11540       END IF;
11541       */
11542       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
11543         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_location (-)',
11544                                p_msg_level=>fnd_log.level_procedure);
11545       END IF;
11546 
11547       --disable_debug;
11548 
11549   END validate_location;
11550 
11551   /**
11552    * PROCEDURE tax_location_validation
11553    *
11554    * DESCRIPTION
11555    *     Validates tax location.
11556    *
11557    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
11558    *
11559    * ARGUMENTS
11560    *   IN:
11561    *     p_location_rec                 Location record.
11562    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
11563    *   IN/OUT:
11564    *     x_return_status                Return status after the call. The status can
11565    *                                    be FND_API.G_RET_STS_SUCCESS (success),
11566    *                                    fnd_api.g_ret_sts_error (error),
11567    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
11568    *
11569    * NOTES
11570    *
11571    * MODIFICATION HISTORY
11572    *
11573    *   07-23-2001    Indrajit Sen       o Created.
11574    *
11575    */
11576 
11577   PROCEDURE tax_location_validation(
11578       p_location_rec       IN      hz_location_v2pub.location_rec_type,
11579       p_create_update_flag IN      VARCHAR2,
11580       x_return_status      IN OUT NOCOPY  VARCHAR2
11581  ) IS
11582       l_location_id                NUMBER;
11583       l_loc_id                     NUMBER;
11584       l_org_id                     NUMBER;
11585       l_city                       VARCHAR2(60);
11586       l_state                      VARCHAR2(60);
11587       l_country                    VARCHAR2(60);
11588       l_county                     VARCHAR2(60);
11589       l_province                   VARCHAR2(60);
11590       l_postal_code                VARCHAR2(60);
11591       l_attribute1                 VARCHAR2(150);
11592       l_attribute2                 VARCHAR2(150);
11593       l_attribute3                 VARCHAR2(150);
11594       l_attribute4                 VARCHAR2(150);
11595       l_attribute5                 VARCHAR2(150);
11596       l_attribute6                 VARCHAR2(150);
11597       l_attribute7                 VARCHAR2(150);
11598       l_attribute8                 VARCHAR2(150);
11599       l_attribute9                 VARCHAR2(150);
11600       l_attribute10                VARCHAR2(150);
11601 
11602       -- old attributes of location to be modified
11603       o_location_id                NUMBER;
11604       o_loc_id                     NUMBER;
11605       o_org_id                     NUMBER;
11606       o_city                       VARCHAR2(60);
11607       o_state                      VARCHAR2(60);
11608       o_country                    VARCHAR2(60);
11609       o_county                     VARCHAR2(60);
11610       o_province                   VARCHAR2(60);
11611       o_postal_code                VARCHAR2(60);
11612       o_attribute1                 VARCHAR2(150);
11613       o_attribute2                 VARCHAR2(150);
11614       o_attribute3                 VARCHAR2(150);
11615       o_attribute4                 VARCHAR2(150);
11616       o_attribute5                 VARCHAR2(150);
11617       o_attribute6                 VARCHAR2(150);
11618       o_attribute7                 VARCHAR2(150);
11619       o_attribute8                 VARCHAR2(150);
11620       o_attribute9                 VARCHAR2(150);
11621       o_attribute10                VARCHAR2(150);
11622 
11623       l_loc_assignment_exist       VARCHAR2(1) := 'N';
11624       l_is_remit_to_location       VARCHAR2(1) := 'N';
11625       l_debug_prefix                   VARCHAR2(30) := '';
11626 
11627   BEGIN
11628 
11629       --enable_debug;
11630 
11631       -- Debug info.
11632       /*IF g_debug THEN
11633           hz_utility_v2pub.debug ('tax_location_validation (+)');
11634       END IF;
11635       */
11636       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
11637         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'tax_location_validation (+)',
11638                                p_msg_level=>fnd_log.level_procedure);
11639       END IF;
11640 
11641       -- tax location validation:
11642 
11643       l_country        :=  p_location_rec.country;
11644       l_city           :=  p_location_rec.city;
11645       l_state          :=  p_location_rec.state;
11646       l_county         :=  p_location_rec.county;
11647       l_province       :=  p_location_rec.province;
11648       l_postal_code    :=  p_location_rec.postal_code;
11649       l_attribute1     :=  p_location_rec.attribute1;
11650       l_attribute2     :=  p_location_rec.attribute2;
11651       l_attribute3     :=  p_location_rec.attribute3;
11652       l_attribute4     :=  p_location_rec.attribute4;
11653       l_attribute5     :=  p_location_rec.attribute5;
11654       l_attribute6     :=  p_location_rec.attribute6;
11655       l_attribute7     :=  p_location_rec.attribute7;
11656       l_attribute8     :=  p_location_rec.attribute8;
11657       l_attribute9     :=  p_location_rec.attribute9;
11658       l_attribute10    :=  p_location_rec.attribute10;
11659 
11660       IF p_create_update_flag = 'C' THEN
11661           -- no validation to be done
11662           -- tax code will be populated when customer account site is created.
11663           null;
11664 
11665       ELSIF p_create_update_flag = 'U' THEN
11666 
11667           l_location_id :=  p_location_rec.location_id;
11668 
11669           -- check if the location is only used by prospect customers
11670 
11671           BEGIN
11672               SELECT  'Y'
11673               INTO    l_loc_assignment_exist
11674               FROM    DUAL
11675               WHERE   EXISTS (SELECT  1
11676                                FROM    hz_loc_assignments la
11677                                WHERE   la.location_id = l_location_id
11678                             );
11679               SELECT  'Y'
11680               INTO    l_is_remit_to_location
11681               FROM    DUAL
11682               WHERE   EXISTS (SELECT  1
11683                                FROM    hz_party_sites ps
11684                                WHERE   ps.location_id = l_location_id
11685                                AND     ps.party_id = -1
11686                             );
11687           EXCEPTION
11688               WHEN NO_DATA_FOUND THEN
11689               NULL;
11690           END;
11691 
11692 
11693           IF l_is_remit_to_location = 'N' and l_loc_assignment_exist = 'Y' THEN
11694 
11695               -- check if the taxable components are changed
11696               IF (  (p_location_rec.country IS NOT NULL
11697                          AND p_location_rec.country <> fnd_api.g_miss_char)
11698                      OR (p_location_rec.city IS NOT NULL
11699                          AND p_location_rec.city <> fnd_api.g_miss_char)
11700                      OR (p_location_rec.state IS NOT NULL
11701                          AND p_location_rec.state <> fnd_api.g_miss_char)
11702                      OR (p_location_rec.county IS NOT NULL
11703                          AND p_location_rec.county <> fnd_api.g_miss_char)
11704                      OR (p_location_rec.province IS NOT NULL
11705                          AND p_location_rec.province <> fnd_api.g_miss_char)
11706                      OR (p_location_rec.postal_code IS NOT NULL
11707                          AND p_location_rec.postal_code <> fnd_api.g_miss_char)
11708                      OR (p_location_rec.attribute1 IS NOT NULL
11709                          AND p_location_rec.attribute1 <> fnd_api.g_miss_char)
11710                      OR (p_location_rec.attribute2 IS NOT NULL
11711                          AND p_location_rec.attribute2 <> fnd_api.g_miss_char)
11712                      OR (p_location_rec.attribute3 IS NOT NULL
11713                          AND p_location_rec.attribute3 <> fnd_api.g_miss_char)
11714                      OR (p_location_rec.attribute4 IS NOT NULL
11715                          AND p_location_rec.attribute4 <> fnd_api.g_miss_char)
11716                      OR (p_location_rec.attribute5 IS NOT NULL
11717                          AND p_location_rec.attribute5 <> fnd_api.g_miss_char)
11718                      OR (p_location_rec.attribute6 IS NOT NULL
11719                          AND p_location_rec.attribute6 <> fnd_api.g_miss_char)
11720                      OR (p_location_rec.attribute7 IS NOT NULL
11721                          AND p_location_rec.attribute7 <> fnd_api.g_miss_char)
11722                      OR (p_location_rec.attribute8 IS NOT NULL
11723                          AND p_location_rec.attribute8 <> fnd_api.g_miss_char)
11724                      OR (p_location_rec.attribute9 IS NOT NULL
11725                          AND p_location_rec.attribute9 <> fnd_api.g_miss_char)
11726                      OR (p_location_rec.attribute10 IS NOT NULL
11727                          AND p_location_rec.attribute10 <> fnd_api.g_miss_char))
11728               THEN
11729                   BEGIN
11730                       SELECT country, city,  state, county, province,  postal_code,
11731                              attribute1, attribute2, attribute3, attribute4, attribute5,
11732                              attribute6, attribute7, attribute8, attribute9, attribute10
11733                       INTO   o_country, o_city, o_state, o_county, o_province, o_postal_code,
11734                              o_attribute1,o_attribute2,o_attribute3,o_attribute4,o_attribute5,
11735                              o_attribute6,o_attribute7,o_attribute8,o_attribute9,o_attribute10
11736                       FROM   HZ_LOCATIONS
11737                       WHERE  location_id = p_location_rec.location_id ;
11738 
11739                       IF (     o_country        <>   p_location_rec.country
11740                             OR  o_city           <>   p_location_rec.city
11741                             OR  o_state          <>   p_location_rec.state
11742                             OR  o_county         <>   p_location_rec.county
11743                             OR  o_province       <>   p_location_rec.province
11744                             OR  o_postal_code    <>   p_location_rec.postal_code
11745                             )
11746                       THEN
11747                           IF ARH_ADDR_PKG.check_tran_for_all_accts(p_location_rec.location_id)
11748                           THEN
11749                               fnd_message.set_name('AR', 'AR_CUST_ADDR_HAS_TRANSACTION');
11750 --Bug 2452282                 fnd_message.set_token('COLUMN', 'tax related fields');
11751                               fnd_msg_pub.add;
11752                               x_return_status := fnd_api.g_ret_sts_error;
11753                           ELSE -- non taxable components to be modified
11754                               null; -- allow updates
11755                           END IF;
11756                       END IF;
11757                   END; -- end of first select
11758               END IF; -- taxable components are not changed
11759           END IF; -- end of p_location_rec.location_id <> -1
11760       END IF;
11761 
11762       -- Debug info.
11763       /*IF g_debug THEN
11764           hz_utility_v2pub.debug ('tax_location_validation (-)');
11765       END IF;
11766       */
11767       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
11768         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'tax_location_validation (-)',
11769                                p_msg_level=>fnd_log.level_procedure);
11770       END IF;
11771 
11772       --disable_debug;
11773 
11774   END tax_location_validation;
11775 
11776   /**
11777    * PROCEDURE validate_relationship_type
11778    *
11779    * DESCRIPTION
11780    *     Validates relationship type record. Checks for
11781    *         uniqueness
11782    *         lookup types
11783    *         mandatory columns
11784    *         non-updateable fields
11785    *         foreign key validations
11786    *         other validations
11787    *
11788    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
11789    *
11790    * ARGUMENTS
11791    *   IN:
11792    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
11793    *     p_relationship_type_rec        relationship type record.
11794    *     p_rowid                        Rowid of the record (used only in update mode).
11795    *   IN/OUT:
11796    *     x_return_status                Return status after the call. The status can
11797    *                                    be FND_API.G_RET_STS_SUCCESS (success),
11798    *                                    fnd_api.g_ret_sts_error (error),
11799    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
11800    *
11801    * NOTES
11802    *
11803    * MODIFICATION HISTORY
11804    *
11805    *   07-23-2001    Indrajit Sen       o Created.
11806    *   12-23-2003    Rajib Ranjan Borah o Bug 2751613.Combination of relationship phrase,subject_type
11807    *                                      and object_type should yield an unique phrase in the reverse
11808    *                                      direction.
11809    *   29-NOV-2004   S V Sowjanya        o Bug 3491584: Added a validation in procedure validate_relationship_type
11810    *                                       to throw an error message while creating non directional relationship type
11811    *                                       with different subject type and object type.
11812    *
11813    */
11814 
11815   PROCEDURE validate_relationship_type(
11816       p_create_update_flag                    IN      VARCHAR2,
11817       p_relationship_type_rec                 IN      HZ_RELATIONSHIP_TYPE_V2PUB.RELATIONSHIP_TYPE_REC_TYPE,
11818       p_rowid                                 IN      ROWID ,
11819       x_return_status                         IN OUT NOCOPY  VARCHAR2
11820  ) IS
11821 
11822       l_dummy                                          VARCHAR2(1);
11823       l_count                                          NUMBER;
11824       l_code                                           VARCHAR2(30);
11825       l_relationship_type                              HZ_RELATIONSHIP_TYPES.RELATIONSHIP_TYPE%TYPE;
11826       l_forward_rel_code                               HZ_RELATIONSHIP_TYPES.FORWARD_REL_CODE%TYPE;
11827       l_backward_rel_code                              HZ_RELATIONSHIP_TYPES.BACKWARD_REL_CODE%TYPE;
11828       l_direction_code                                 HZ_RELATIONSHIP_TYPES.DIRECTION_CODE%TYPE;
11829       l_create_party_flag                              HZ_RELATIONSHIP_TYPES.CREATE_PARTY_FLAG%TYPE;
11830       l_allow_relate_to_self_flag                      HZ_RELATIONSHIP_TYPES.ALLOW_RELATE_TO_SELF_FLAG%TYPE;
11831       l_allow_circular_relationships                   HZ_RELATIONSHIP_TYPES.ALLOW_CIRCULAR_RELATIONSHIPS%TYPE;
11832       l_hierarchical_flag                              HZ_RELATIONSHIP_TYPES.HIERARCHICAL_FLAG%TYPE;
11833       l_multiple_parent_allowed                        HZ_RELATIONSHIP_TYPES.MULTIPLE_PARENT_ALLOWED%TYPE;
11834       l_incl_unrelated_entities                        HZ_RELATIONSHIP_TYPES.INCL_UNRELATED_ENTITIES%TYPE;
11835       l_subject_type                                   HZ_RELATIONSHIP_TYPES.SUBJECT_TYPE%TYPE;
11836       l_object_type                                    HZ_RELATIONSHIP_TYPES.OBJECT_TYPE%TYPE;
11837       l_created_by_module                              VARCHAR2(150);
11838       l_application_id                                 NUMBER;
11839       l_status                                         VARCHAR2(1);
11840       l_debug_prefix                                   VARCHAR2(30) := '';
11841       l_role                                           VARCHAR2(30);
11842 
11843   BEGIN
11844 
11845       --enable_debug;
11846 
11847       -- Debug info.
11848       /*IF g_debug THEN
11849           hz_utility_v2pub.debug ('validate_relationship_type (+)');
11850       END IF;
11851       */
11852       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
11853         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_relationship_type (+)',
11854                                p_msg_level=>fnd_log.level_procedure);
11855     END IF;
11856 
11857       -- select columns needed to be checked from table during update
11858       IF (p_create_update_flag = 'U') THEN
11859           SELECT RELATIONSHIP_TYPE,
11860                  FORWARD_REL_CODE,
11861                  BACKWARD_REL_CODE,
11862                  DIRECTION_CODE,
11863                  HIERARCHICAL_FLAG,
11864                  CREATE_PARTY_FLAG,
11865                  ALLOW_RELATE_TO_SELF_FLAG,
11866                  ALLOW_CIRCULAR_RELATIONSHIPS,
11867                  MULTIPLE_PARENT_ALLOWED,
11868                  INCL_UNRELATED_ENTITIES,
11869                  SUBJECT_TYPE,
11870                  OBJECT_TYPE,
11871                  ROLE,
11872                  CREATED_BY_MODULE,
11873                  APPLICATION_ID
11874           INTO   l_relationship_type,
11875                  l_forward_rel_code,
11876                  l_backward_rel_code,
11877                  l_direction_code,
11878                  l_hierarchical_flag,
11879                  l_create_party_flag,
11880                  l_allow_relate_to_self_flag,
11881                  l_allow_circular_relationships,
11882                  l_multiple_parent_allowed,
11883                  l_incl_unrelated_entities,
11884                  l_subject_type,
11885                  l_object_type,
11886                  l_role,
11887                  l_created_by_module,
11888                  l_application_id
11889           FROM   HZ_RELATIONSHIP_TYPES
11890           WHERE  ROWID = p_rowid;
11891       END IF;
11892 
11893 
11894       -- Validate the nonupdateability of ROLE
11895 
11896        IF (p_create_update_flag = 'U') THEN
11897           validate_nonupdateable (
11898           p_column                               => 'ROLE',
11899           p_column_value                         => p_relationship_type_rec.forward_role,
11900           p_old_column_value                     => l_role,
11901           x_return_status                        => x_return_status
11902           );
11903           --------Bug no: 3564107 ---------------------------------
11904           BEGIN
11905             SELECT ROLE INTO l_role
11906             FROM   HZ_RELATIONSHIP_TYPES
11907             WHERE  RELATIONSHIP_TYPE = l_relationship_type
11908             AND    FORWARD_REL_CODE  = l_backward_rel_code
11909             AND    BACKWARD_REL_CODE = l_forward_rel_code
11910             AND    SUBJECT_TYPE      = l_object_type
11911             AND    OBJECT_TYPE       = l_subject_type
11912             AND ROWNUM               = 1;
11913 
11914             validate_nonupdateable (
11915             p_column                               => 'ROLE',
11916             p_column_value                         => p_relationship_type_rec.backward_role,
11917             p_old_column_value                     => l_role,
11918             x_return_status                        => x_return_status
11919             );
11920           EXCEPTION
11921            WHEN NO_DATA_FOUND THEN
11922             NULL;
11923           END;
11924           --------End of Bug no: 3564107 ---------------------------------
11925         END IF;
11926 
11927       /* -- Raise an error if user tries to update forward role to NULL
11928       IF (p_create_update_flag = 'U') THEN
11929        validate_cannot_update_to_null (
11930         p_column              => 'role',
11931         p_column_value        => p_relationship_type_rec.forward_role,
11932         x_return_status       => x_return_status
11933       );
11934 
11935        -- Raise an error if user tries to update backward role to NULL
11936       IF (p_create_update_flag = 'U') THEN
11937        validate_cannot_update_to_null (
11938         p_column              => 'role',
11939         p_column_value        => p_relationship_type_rec.backward_role,
11940         x_return_status       => x_return_status
11941       );
11942       END IF;*/
11943 
11944       /*-- validate forward_role
11945              IF (p_create_update_flag = 'U') THEN
11946        validate_lookup (
11947               p_column                                => 'role',
11948               p_lookup_type                           => 'HZ_RELATIONSHIP_ROLE',
11949               p_column_value                          => p_relationship_type_rec.forward_role,
11950               x_return_status                         => x_return_status);
11951        END IF;
11952 
11953        -- validate backward_role
11954              IF (p_create_update_flag = 'U') THEN
11955        validate_lookup (
11956               p_column                                => 'role',
11957               p_lookup_type                           => 'HZ_RELATIONSHIP_ROLE',
11958               p_column_value                          => p_relationship_type_rec.backward_role,
11959               x_return_status                         => x_return_status);
11960        END IF;    */
11961 
11962 
11963       -----------------------------
11964       -- validate relationship_type
11965       -----------------------------
11966 
11967       -- relationship_type is mandatory
11968       validate_mandatory (
11969           p_create_update_flag                    => p_create_update_flag,
11970           p_column                                => 'relationship_type',
11971           p_column_value                          => p_relationship_type_rec.relationship_type,
11972           x_return_status                         => x_return_status);
11973 
11974       /*IF g_debug THEN
11975           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
11976               'relationship_type is mandatory. ' ||
11977               'x_return_status = ' || x_return_status, l_debug_prefix);
11978       END IF;
11979       */
11980       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
11981            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'relationship_type is mandatory. ' ||
11982                         'x_return_status = ' || x_return_status,
11983                                   p_msg_level=>fnd_log.level_statement);
11984       END IF;
11985 
11986 
11987       -- relationship_type is non-updateable
11988       IF p_create_update_flag = 'U' THEN
11989           validate_nonupdateable (
11990               p_column                                => 'relationship_type',
11991               p_column_value                          => p_relationship_type_rec.relationship_type,
11992               p_old_column_value                      => l_relationship_type,
11993               x_return_status                         => x_return_status);
11994           END IF;
11995 
11996           /*IF g_debug THEN
11997               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
11998                   'relationship_type is non-updateable. ' ||
11999                   'x_return_status = ' || x_return_status, l_debug_prefix);
12000           END IF;
12001           */
12002           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12003             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'relationship_type is non-updateable. ' ||
12004                                 'x_return_status = ' || x_return_status,
12005                                   p_msg_level=>fnd_log.level_statement);
12006            END IF;
12007 
12008 
12009 
12010 
12011       ------------------
12012       -- validate status
12013       ------------------
12014 
12015       -- status cannot be set to null during update
12016       IF p_create_update_flag = 'U' THEN
12017           validate_cannot_update_to_null (
12018               p_column                                => 'status',
12019               p_column_value                          => p_relationship_type_rec.status,
12020               x_return_status                         => x_return_status);
12021 
12022           /*IF g_debug THEN
12023               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12024                   'status cannot be set to null during update. ' ||
12025                   'x_return_status = ' || x_return_status, l_debug_prefix);
12026           END IF;
12027           */
12028           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12029                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status cannot be set to null during update. ' ||
12030                   'x_return_status = ' || x_return_status,
12031                                   p_msg_level=>fnd_log.level_statement);
12032           END IF;
12033 
12034 
12035       END IF;
12036 
12037       -- status is lookup code in lookup type CODE_STATUS
12038       IF p_relationship_type_rec.status IS NOT NULL
12039          AND
12040          p_relationship_type_rec.status <> fnd_api.g_miss_char
12041          AND
12042          (p_create_update_flag = 'C'
12043           OR
12044           (p_create_update_flag = 'U'
12045            AND
12046            p_relationship_type_rec.status <> NVL(l_status, fnd_api.g_miss_char)
12047          )
12048         )
12049       THEN
12050           validate_lookup (
12051               p_column                                => 'status',
12052               p_lookup_type                           => 'CODE_STATUS',
12053               p_column_value                          => p_relationship_type_rec.status,
12054               x_return_status                         => x_return_status);
12055 
12056           /*IF g_debug THEN
12057               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12058                   'status is lookup code in lookup type CODE_STATUS. ' ||
12059                   'x_return_status = ' || x_return_status, l_debug_prefix);
12060           END IF;
12061           */
12062           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12063                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12064                 p_message=>'status is lookup code in lookup type CODE_STATUS. ' ||
12065                                 'x_return_status = ' || x_return_status,
12066                                   p_msg_level=>fnd_log.level_statement);
12067           END IF;
12068 
12069 
12070       END IF;
12071 
12072       -----------------------------
12073       -- validate create_party_flag
12074       -----------------------------
12075 
12076       -- create_party_flag is lookup code in lookup type YES/NO
12077       validate_lookup (
12078           p_column                                => 'create_party_flag',
12079           p_lookup_type                           => 'YES/NO',
12080           p_column_value                          => p_relationship_type_rec.create_party_flag,
12081           x_return_status                         => x_return_status);
12082 
12083       /*IF g_debug THEN
12084           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12085               'create_party_flag should be in lookup YES/NO. ' ||
12086               'x_return_status = ' || x_return_status, l_debug_prefix);
12087       END IF;
12088       */
12089       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12090            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'create_party_flag should be in lookup YES/NO. ' ||
12091                  'x_return_status = ' || x_return_status,
12092                                   p_msg_level=>fnd_log.level_statement);
12093      END IF;
12094 
12095 
12096       -- create_party_flag is non-updateable if relationship records are already created based
12097       -- on the current value of the flag
12098       IF p_create_update_flag = 'U' THEN
12099           IF p_relationship_type_rec.create_party_flag <> fnd_api.g_miss_char
12100              AND
12101              p_relationship_type_rec.create_party_flag IS NOT NULL
12102              AND
12103              p_relationship_type_rec.create_party_flag <> l_create_party_flag
12104           THEN
12105               IF l_create_party_flag = 'Y' AND p_relationship_type_rec.create_party_flag = 'N' THEN
12106                   -- check if there is any relationship with this relationship type having a party.
12107                   -- if there is, do not allow the update
12108                   BEGIN
12109                       SELECT 1 INTO l_count
12110                       FROM   HZ_RELATIONSHIPS
12111                       WHERE  RELATIONSHIP_TYPE = l_relationship_type
12112                       AND    SUBJECT_TYPE = l_subject_type
12113                       AND    OBJECT_TYPE = l_object_type
12114                       AND    RELATIONSHIP_CODE = l_forward_rel_code
12115                       AND    PARTY_ID IS NOT NULL
12116                       AND    STATUS = 'A'
12117                       AND    TRUNC(SYSDATE) BETWEEN TRUNC(START_DATE) AND TRUNC(NVL(END_DATE, SYSDATE))
12118                       AND    ROWNUM = 1;
12119 
12120                       -- update is not allowed, raise error
12121                       fnd_message.set_name('AR', 'HZ_API_CPF_NON_UPDATEABLE');
12122                       fnd_msg_pub.add;
12123                       x_return_status := fnd_api.g_ret_sts_error;
12124 
12125                    EXCEPTION
12126                        WHEN NO_DATA_FOUND THEN
12127                            NULL;
12128                    END;
12129                END IF;
12130 
12131                IF l_create_party_flag = 'N' AND p_relationship_type_rec.create_party_flag = 'Y' THEN
12132                    -- check if there is any relationship with this relationship type not having a party.
12133                    -- if there is, do not allow the update.
12134                   BEGIN
12135                       SELECT 1 INTO l_count
12136                       FROM   HZ_RELATIONSHIPS
12137                       WHERE  RELATIONSHIP_TYPE = l_relationship_type
12138                       AND    SUBJECT_TYPE = l_subject_type
12139                       AND    OBJECT_TYPE = l_object_type
12140                       AND    RELATIONSHIP_CODE = l_forward_rel_code
12141                       AND    PARTY_ID IS NULL
12142                       AND    STATUS = 'A'
12143                       AND    TRUNC(SYSDATE) BETWEEN TRUNC(START_DATE) AND TRUNC(NVL(END_DATE, SYSDATE))
12144                       AND    ROWNUM = 1;
12145 
12146                       -- update is not allowed, raise error
12147                       fnd_message.set_name('AR', 'HZ_API_CPF_NON_UPDATEABLE');
12148                       fnd_msg_pub.add;
12149                       x_return_status := fnd_api.g_ret_sts_error;
12150 
12151                    EXCEPTION
12152                        WHEN NO_DATA_FOUND THEN
12153                            NULL;
12154                    END;
12155 
12156               END IF;
12157           END IF;
12158       END IF;
12159 
12160       /*IF g_debug THEN
12161           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12162               'create_party_flag is updateable/non-updateable. ' ||
12163               'x_return_status = ' || x_return_status, l_debug_prefix);
12164       END IF;
12165       */
12166       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12167            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'create_party_flag is updateable/non-updateable. ' ||
12168                 'x_return_status = ' || x_return_status,
12169                                   p_msg_level=>fnd_log.level_statement);
12170       END IF;
12171 
12172 
12173       -----------------------------
12174       -- validate allow_circular_relationships
12175       -----------------------------
12176 
12177       -- allow_circular_relationships is lookup code in lookup type YES/NO
12178       validate_lookup (
12179           p_column                                => 'allow_circular_relationships',
12180           p_lookup_type                           => 'YES/NO',
12181           p_column_value                          => p_relationship_type_rec.allow_circular_relationships,
12182           x_return_status                         => x_return_status);
12183 
12184       /*IF g_debug THEN
12185           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12186               'allow_circular_relationships should be in lookup YES/NO. ' ||
12187               'x_return_status = ' || x_return_status, l_debug_prefix);
12188       END IF;
12189       */
12190       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12191            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12192            p_message=>'allow_circular_relationships should be in lookup YES/NO. ' ||
12193               'x_return_status = ' || x_return_status,
12194                                   p_msg_level=>fnd_log.level_statement);
12195        END IF;
12196 
12197 
12198       -- allow_circular_relationships is non-updateable
12199       IF p_create_update_flag = 'U' THEN
12200           validate_nonupdateable (
12201               p_column                                => 'allow_circular_relationships',
12202               p_column_value                          => p_relationship_type_rec.allow_circular_relationships,
12203               p_old_column_value                      => l_allow_circular_relationships,
12204               x_return_status                         => x_return_status);
12205 
12206           /*IF g_debug THEN
12207               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12208                   'allow_circular_relationships is non-updateable. ' ||
12209                   'x_return_status = ' || x_return_status, l_debug_prefix);
12210           END IF;
12211           */
12212           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12213             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12214             p_message=>'allow_circular_relationships is non-updateable. ' ||
12215                   'x_return_status = ' || x_return_status,
12216                                   p_msg_level=>fnd_log.level_statement);
12217           END IF;
12218 
12219 
12220       END IF;
12221 
12222       -------------------------------------
12223       -- validate allow_relate_to_self_flag
12224       -------------------------------------
12225 
12226       -- allow_relate_to_self_flag is lookup code in lookup type YES/NO
12227       validate_lookup (
12228           p_column                                => 'allow_relate_to_self_flag',
12229           p_lookup_type                           => 'YES/NO',
12230           p_column_value                          => p_relationship_type_rec.allow_relate_to_self_flag,
12231           x_return_status                         => x_return_status);
12232 
12233       /*IF g_debug THEN
12234           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12235               'allow_relate_to_self_flag should be in lookup YES/NO. ' ||
12236               'x_return_status = ' || x_return_status, l_debug_prefix);
12237       END IF;
12238       */
12239       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12240            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12241            p_message=>'allow_relate_to_self_flag should be in lookup YES/NO. ' ||
12242                                         'x_return_status = ' || x_return_status,
12243                                   p_msg_level=>fnd_log.level_statement);
12244       END IF;
12245 
12246 
12247       -- allow_relate_to_self_flag is non-updateable
12248       IF p_create_update_flag = 'U' THEN
12249           validate_nonupdateable (
12250               p_column                                => 'allow_relate_to_self_flag',
12251               p_column_value                          => p_relationship_type_rec.allow_relate_to_self_flag,
12252               p_old_column_value                      => l_allow_relate_to_self_flag,
12253               x_return_status                         => x_return_status);
12254 
12255           /*IF g_debug THEN
12256               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12257                   'allow_relate_to_self_flag is non-updateable. ' ||
12258                   'x_return_status = ' || x_return_status, l_debug_prefix);
12259           END IF;
12260           */
12261           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12262            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'allow_relate_to_self_flag is non-updateable. ' ||
12263                         'x_return_status = ' || x_return_status,
12264                                   p_msg_level=>fnd_log.level_statement);
12265          END IF;
12266 
12267 
12268       END IF;
12269 
12270       ----------------------------
12271       -- validate forward_rel_code
12272       ----------------------------
12273 
12274       -- forward_rel_code is mandatory
12275       validate_mandatory (
12276           p_create_update_flag                    => p_create_update_flag,
12277           p_column                                => 'forward_rel_code',
12278           p_column_value                          => p_relationship_type_rec.forward_rel_code,
12279           x_return_status                         => x_return_status);
12280 
12281       -- forward_rel_code is lookup code in lookup type PARTY_RELATIONS_TYPE
12282       validate_lookup (
12283           p_column                                => 'forward_rel_code',
12284           p_lookup_type                           => 'PARTY_RELATIONS_TYPE',
12285           p_column_value                          => p_relationship_type_rec.forward_rel_code,
12286           x_return_status                         => x_return_status);
12287 
12288       /*IF g_debug THEN
12289           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12290               'forward_rel_code is lookup code in lookup type PARTY_RELATIONS_TYPE. ' ||
12291               'x_return_status = ' || x_return_status, l_debug_prefix);
12292       END IF;
12293       */
12294       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12295            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12296            p_message=>'forward_rel_code is lookup code in lookup type PARTY_RELATIONS_TYPE. ' ||
12297               'x_return_status = ' || x_return_status,
12298                                   p_msg_level=>fnd_log.level_statement);
12299       END IF;
12300 
12301 
12302       -- forward_rel_code is non-updateable
12303       IF p_create_update_flag = 'U' THEN
12304           validate_nonupdateable (
12305               p_column                                => 'forward_rel_code',
12306               p_column_value                          => p_relationship_type_rec.forward_rel_code,
12307               p_old_column_value                      => l_forward_rel_code,
12308               x_return_status                         => x_return_status);
12309 
12310           /*IF g_debug THEN
12311               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12312                   'forward_rel_code is non-updateable. ' ||
12313                   'x_return_status = ' || x_return_status, l_debug_prefix);
12314           END IF;
12315           */
12316           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12317             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'forward_rel_code is non-updateable. ' ||
12318                   'x_return_status = ' || x_return_status,
12319                                   p_msg_level=>fnd_log.level_statement);
12320           END IF;
12321 
12322 
12323       END IF;
12324 
12325       -----------------------------
12326       -- validate backward_rel_code
12327       -----------------------------
12328 
12329       -- backward_rel_code is mandatory
12330       validate_mandatory (
12331           p_create_update_flag                    => p_create_update_flag,
12332           p_column                                => 'backward_rel_code',
12333           p_column_value                          => p_relationship_type_rec.backward_rel_code,
12334           x_return_status                         => x_return_status);
12335 
12336       -- backward_rel_code is lookup code in lookup type PARTY_RELATIONS_TYPE
12337       validate_lookup (
12338           p_column                                => 'backward_rel_code',
12339           p_lookup_type                           => 'PARTY_RELATIONS_TYPE',
12340           p_column_value                          => p_relationship_type_rec.backward_rel_code,
12341           x_return_status                         => x_return_status);
12342 
12343       /*IF g_debug THEN
12344           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12345               'backward_rel_code is lookup code in lookup type PARTY_RELATIONS_TYPE. ' ||
12346               'x_return_status = ' || x_return_status, l_debug_prefix);
12347       END IF;
12348       */
12349       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12350            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12351            p_message=>'backward_rel_code is lookup code in lookup type PARTY_RELATIONS_TYPE. ' ||
12352               'x_return_status = ' || x_return_status,
12353                                   p_msg_level=>fnd_log.level_statement);
12354       END IF;
12355 
12356 
12357       -- backward_rel_code is non-updateable
12358       IF p_create_update_flag = 'U' THEN
12359           validate_nonupdateable (
12360               p_column                                => 'backward_rel_code',
12361               p_column_value                          => p_relationship_type_rec.backward_rel_code,
12362               p_old_column_value                      => l_backward_rel_code,
12363               x_return_status                         => x_return_status);
12364 
12365           /*IF g_debug THEN
12366               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12367                   'backward_rel_code is non-updateable. ' ||
12368                   'x_return_status = ' || x_return_status, l_debug_prefix);
12369           END IF;
12370           */
12371           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12372             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'backward_rel_code is non-updateable. ' ||
12373                   'x_return_status = ' || x_return_status,
12374                                   p_msg_level=>fnd_log.level_statement);
12375           END IF;
12376 
12377 
12378       END IF;
12379 
12380       -----------------------------
12381       -- validate direction_code
12382       -----------------------------
12383 
12384       -- direction_code is mandatory
12385       validate_mandatory (
12386           p_create_update_flag                    => p_create_update_flag,
12387           p_column                                => 'direction_code',
12388           p_column_value                          => p_relationship_type_rec.direction_code,
12389           x_return_status                         => x_return_status);
12390 
12391       /*IF g_debug THEN
12392           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12393               'direction_code is mandatory. ' ||
12394               'x_return_status = ' || x_return_status, l_debug_prefix);
12395       END IF;
12396       */
12397       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12398            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'direction_code is mandatory. ' ||
12399               'x_return_status = ' || x_return_status,
12400                                   p_msg_level=>fnd_log.level_statement);
12401       END IF;
12402 
12403 
12404       -- direction_code is lookup code in lookup type DIRECTION_CODE
12405       validate_lookup (
12406           p_column                                => 'direction_code',
12407           p_lookup_type                           => 'DIRECTION_CODE',
12408           p_column_value                          => p_relationship_type_rec.direction_code,
12409           x_return_status                         => x_return_status);
12410 
12411       /*IF g_debug THEN
12412           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12413               'direction_code is lookup code in lookup type DIRECTION_CODE. ' ||
12414               'x_return_status = ' || x_return_status, l_debug_prefix);
12415       END IF;
12416       */
12417       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12418            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12419            p_message=>'direction_code is lookup code in lookup type DIRECTION_CODE. ' ||
12420               'x_return_status = ' || x_return_status,
12421                                   p_msg_level=>fnd_log.level_statement);
12422        END IF;
12423 
12424 
12425       -- direction_code is non-updateable
12426       IF p_create_update_flag = 'U' THEN
12427           validate_nonupdateable (
12428               p_column                                => 'direction_code',
12429               p_column_value                          => p_relationship_type_rec.direction_code,
12430               p_old_column_value                      => l_direction_code,
12431               x_return_status                         => x_return_status);
12432 
12433           /*IF g_debug THEN
12434               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12435                   'direction_code is non-updateable. ' ||
12436                   'x_return_status = ' || x_return_status, l_debug_prefix);
12437           END IF;
12438           */
12439           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12440             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'direction_code is non-updateable. ' ||
12441                   'x_return_status = ' || x_return_status,
12442                                   p_msg_level=>fnd_log.level_statement);
12443           END IF;
12444 
12445 
12446       END IF;
12447 
12448       --------------------
12449       -- validate subject_type
12450       --------------------
12451 
12452       -- subject_type is mandatory
12453       validate_mandatory (
12454           p_create_update_flag                    => p_create_update_flag,
12455           p_column                                => 'subject_type',
12456           p_column_value                          => p_relationship_type_rec.subject_type,
12457           x_return_status                         => x_return_status);
12458 
12459       /*IF g_debug THEN
12460           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12461               'subject_type is mandatory. ' ||
12462               'x_return_status = ' || x_return_status, l_debug_prefix);
12463       END IF;
12464       */
12465       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12466            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_type is mandatory. ' ||
12467               'x_return_status = ' || x_return_status,
12468                                   p_msg_level=>fnd_log.level_statement);
12469       END IF;
12470 
12471 
12472       -- subject_type has foreign key fnd_object_instance_sets.instance_set_name
12473       IF p_relationship_type_rec.subject_type IS NOT NULL
12474          AND
12475          p_relationship_type_rec.subject_type <> fnd_api.g_miss_char
12476       THEN
12477           BEGIN
12478               SELECT 'Y'
12479               INTO   l_dummy
12480               FROM   FND_OBJECT_INSTANCE_SETS
12481               WHERE  INSTANCE_SET_NAME = p_relationship_type_rec.subject_type;
12482           EXCEPTION
12483               WHEN NO_DATA_FOUND THEN
12484                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
12485                   fnd_message.set_token('FK', 'subject_type');
12486                   fnd_message.set_token('COLUMN', 'instance_set_name');
12487                   fnd_message.set_token('TABLE', 'fnd_object_instance_sets');
12488                   fnd_msg_pub.add;
12489                   x_return_status := fnd_api.g_ret_sts_error;
12490           END;
12491 
12492           /*IF g_debug THEN
12493               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12494                   'subject_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
12495                   'x_return_status = ' || x_return_status, l_debug_prefix);
12496           END IF;
12497           */
12498           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12499              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12500              p_message=>'subject_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
12501                   'x_return_status = ' || x_return_status,
12502                                   p_msg_level=>fnd_log.level_statement);
12503           END IF;
12504 
12505 
12506       END IF;
12507 
12508       -- subject_type is non-updateable
12509       IF p_create_update_flag = 'U' THEN
12510           validate_nonupdateable (
12511               p_column                                => 'subject_type',
12512               p_column_value                          => p_relationship_type_rec.subject_type,
12513               p_old_column_value                      => l_subject_type,
12514               x_return_status                         => x_return_status);
12515 
12516           /*IF g_debug THEN
12517               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12518                   'subject_type is non-updateable. ' ||
12519                   'x_return_status = ' || x_return_status, l_debug_prefix);
12520           END IF;
12521           */
12522           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12523            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_type is non-updateable. ' ||
12524                   'x_return_status = ' || x_return_status,
12525                                   p_msg_level=>fnd_log.level_statement);
12526           END IF;
12527 
12528 
12529       END IF;
12530 
12531       --------------------
12532       -- validate object_type
12533       --------------------
12534 
12535       -- object_type is mandatory
12536       validate_mandatory (
12537           p_create_update_flag                    => p_create_update_flag,
12538           p_column                                => 'object_type',
12539           p_column_value                          => p_relationship_type_rec.object_type,
12540           x_return_status                         => x_return_status);
12541 
12542       /*IF g_debug THEN
12543           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12544               'object_type is mandatory. ' ||
12545               'x_return_status = ' || x_return_status, l_debug_prefix);
12546       END IF;
12547       */
12548       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12549            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_type is mandatory. ' ||
12550               'x_return_status = ' || x_return_status,
12551                                   p_msg_level=>fnd_log.level_statement);
12552        END IF;
12553 
12554 
12555       -- object_type has foreign key fnd_object_instance_sets.instance_set_name
12556       IF p_relationship_type_rec.object_type IS NOT NULL
12557          AND
12558          p_relationship_type_rec.object_type <> fnd_api.g_miss_char
12559       THEN
12560           BEGIN
12561               SELECT 'Y'
12562               INTO   l_dummy
12563               FROM   FND_OBJECT_INSTANCE_SETS
12564               WHERE  INSTANCE_SET_NAME = p_relationship_type_rec.object_type;
12565           EXCEPTION
12566               WHEN NO_DATA_FOUND THEN
12567                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
12568                   fnd_message.set_token('FK', 'object_type');
12569                   fnd_message.set_token('COLUMN', 'instance_set_name');
12570                   fnd_message.set_token('TABLE', 'fnd_object_instance_sets');
12571                   fnd_msg_pub.add;
12572                   x_return_status := fnd_api.g_ret_sts_error;
12573           END;
12574 
12575           /*IF g_debug THEN
12576               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12577                   'object_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
12578                   'x_return_status = ' || x_return_status, l_debug_prefix);
12579           END IF;
12580           */
12581           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12582            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12583            p_message=>'object_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
12584                   'x_return_status = ' || x_return_status,
12585                                   p_msg_level=>fnd_log.level_statement);
12586           END IF;
12587 
12588 
12589       END IF;
12590 
12591       -- object_type is non-updateable
12592       IF p_create_update_flag = 'U' THEN
12593           validate_nonupdateable (
12594               p_column                                => 'object_type',
12595               p_column_value                          => p_relationship_type_rec.object_type,
12596               p_old_column_value                      => l_object_type,
12597               x_return_status                         => x_return_status);
12598 
12599           /*IF g_debug THEN
12600               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12601                   'object_type is non-updateable. ' ||
12602                   'x_return_status = ' || x_return_status, l_debug_prefix);
12603           END IF;
12604           */
12605           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12606                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_type is non-updateable. ' ||
12607                   'x_return_status = ' || x_return_status,
12608                                   p_msg_level=>fnd_log.level_statement);
12609           END IF;
12610 
12611 
12612       END IF;
12613 
12614       ---------------------------
12615       -- validate the combination
12616       ---------------------------
12617 
12618       -- the combination of FORWARD_REL_CODE, SUBJECT_TYPE, OBJECT_TYPE should be
12619       -- able to identify a unique BACKWARD_REL_CODE. Thus a second record with same
12620       -- combination of FORWARD_REL_CODE, SUBJECT_TYPE, OBJECT_TYPE should have
12621       -- same BACKWARD_REL_CODE.
12622       -- 07/23/2002. this validation has been enhanced to apply the validation within a
12623       -- relationship type rather than doing the validation across all relatiosnhip
12624       -- types. bug 2453736.
12625       -- first check whether there is one such record
12626       -- Bug 2751613.This validation should work for all the different combinations.
12627 /* Bug 2751613.
12628  |    SELECT COUNT(*)
12629  |    INTO   l_count
12630  |    FROM   HZ_RELATIONSHIP_TYPES
12631  |    WHERE  RELATIONSHIP_TYPE = p_relationship_type_rec.relationship_type
12632  |    AND    FORWARD_REL_CODE = p_relationship_type_rec.forward_rel_code
12633  |    AND    SUBJECT_TYPE = p_relationship_type_rec.subject_type
12634  |    AND    OBJECT_TYPE = p_relationship_type_rec.object_type;
12635  |
12636  |    IF l_count > 0 THEN
12637  |        --since there is one or more such records, we need to get the backward_rel_code
12638  |        SELECT BACKWARD_REL_CODE
12639  |        INTO   l_code
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  |        AND    ROWNUM = 1;
12646  |        -- if the backward_rel_code passed do not match with whatever
12647  |        -- obtained from above query, error out NOCOPY
12648  |        IF l_code <> p_relationship_type_rec.backward_rel_code then
12649  |            fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION');
12650  |            fnd_msg_pub.add;
12651  |            x_return_status := FND_API.G_RET_STS_ERROR;
12652  |        END IF;
12653  |    END IF;
12654  */
12655 
12656       -- Bug 2751613.
12657       SELECT COUNT(*)
12658       INTO   l_count
12659       FROM   HZ_RELATIONSHIP_TYPES
12660       WHERE
12661            (
12662            RELATIONSHIP_TYPE = p_relationship_type_rec.relationship_type
12663            )
12664           AND
12665            (
12666             (
12667              (SUBJECT_TYPE = p_relationship_type_rec.subject_type
12668              AND    OBJECT_TYPE = p_relationship_type_rec.object_type
12669              )
12670             AND
12671              (
12672               (BACKWARD_REL_CODE <> p_relationship_type_rec.backward_rel_code
12673               AND  FORWARD_REL_CODE = p_relationship_type_rec.forward_rel_code
12674               )
12675              OR
12676               (BACKWARD_REL_CODE = p_relationship_type_rec.backward_rel_code
12677               AND   FORWARD_REL_CODE <> p_relationship_type_rec.forward_rel_code
12678               )
12679              )
12680             )
12681            OR
12682             (
12683              (SUBJECT_TYPE = p_relationship_type_rec.object_type
12684              AND    OBJECT_TYPE = p_relationship_type_rec.subject_type
12685              )
12686             AND
12687              (
12688               (BACKWARD_REL_CODE <> p_relationship_type_rec.forward_rel_code
12689               AND  FORWARD_REL_CODE = p_relationship_type_rec.backward_rel_code
12690               )
12691              OR
12692               (BACKWARD_REL_CODE = p_relationship_type_rec.forward_rel_code
12693               AND   FORWARD_REL_CODE <> p_relationship_type_rec.backward_rel_code
12694               )
12695              )
12696             )
12697            );
12698 
12699       IF l_count <> 0
12700       THEN
12701         fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION');
12702               fnd_msg_pub.add;
12703               x_return_status := FND_API.G_RET_STS_ERROR;
12704       END IF;
12705 
12706       /*IF g_debug THEN
12707           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12708               'validate the combination of forward_rel_code, subject_type, object_type. ' ||
12709               'x_return_status = ' || x_return_status, l_debug_prefix);
12710       END IF;
12711       */
12712       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12713            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12714            p_message=>'validate the combination of forward_rel_code,backward_rel_code, subject_type, object_type. ' ||
12715               'x_return_status = ' || x_return_status,
12716                                   p_msg_level=>fnd_log.level_statement);
12717       END IF;
12718 
12719 
12720       -----------------------------
12721       -- check for duplicate record
12722       -----------------------------
12723 
12724       -- check for duplicate record
12725       BEGIN
12726           SELECT 1
12727           INTO   l_count
12728           FROM   HZ_RELATIONSHIP_TYPES
12729           WHERE  RELATIONSHIP_TYPE = p_relationship_type_rec.relationship_type
12730           AND    FORWARD_REL_CODE = p_relationship_type_rec.forward_rel_code
12731           AND    BACKWARD_REL_CODE = p_relationship_type_rec.backward_rel_code
12732           AND    SUBJECT_TYPE = p_relationship_type_rec.subject_type
12733           AND    OBJECT_TYPE = p_relationship_type_rec.object_type
12734           AND    RELATIONSHIP_TYPE_ID <> NVL(p_relationship_type_rec.relationship_type_id,-1);
12735 
12736           fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
12737           fnd_message.set_token('COLUMN', 'relationship type, forward rel code, backward rel code, subject type, object type');
12738           fnd_msg_pub.add;
12739           x_return_status := fnd_api.g_ret_sts_error;
12740 
12741       EXCEPTION
12742           WHEN NO_DATA_FOUND THEN
12743               NULL;
12744       END;
12745 
12746       /*IF g_debug THEN
12747           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12748               'check for duplicate record. ' ||
12749               'x_return_status = ' || x_return_status, l_debug_prefix);
12750       END IF;
12751       */
12752       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12753            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'check for duplicate record. ' ||
12754               'x_return_status = ' || x_return_status,
12755                                   p_msg_level=>fnd_log.level_statement);
12756       END IF;
12757 
12758 
12759       --------------------------
12760       -- validate direction_code
12761       --------------------------
12762 
12763       -- if forward_rel_code and backward_rel_code are same then direction_flag
12764       -- cannot be 'P' or 'C'
12765       IF p_relationship_type_rec.forward_rel_code = p_relationship_type_rec.backward_rel_code
12766          AND
12767          p_relationship_type_rec.direction_code <> 'N'
12768       THEN
12769           fnd_message.set_name('AR', 'HZ_INVALID_DIRECTION_CODE1');
12770           fnd_msg_pub.add;
12771           x_return_status := FND_API.G_RET_STS_ERROR;
12772       END IF;
12773 
12774       -- if forward_rel_code and backward_rel_code are not same then direction_flag
12775       -- cannot be 'N'
12776       IF p_relationship_type_rec.forward_rel_code <> p_relationship_type_rec.backward_rel_code
12777          AND p_relationship_type_rec.direction_code = 'N'
12778       THEN
12779           fnd_message.set_name('AR', 'HZ_INVALID_DIRECTION_CODE2');
12780           fnd_msg_pub.add;
12781           x_return_status := FND_API.G_RET_STS_ERROR;
12782       END IF;
12783 
12784       /*IF g_debug THEN
12785           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12786               'validate direction_code. ' ||
12787               'x_return_status = ' || x_return_status, l_debug_prefix);
12788       END IF;
12789       */
12790       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12791            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate direction_code. ' ||
12792               'x_return_status = ' || x_return_status,
12793                                   p_msg_level=>fnd_log.level_statement);
12794       END IF;
12795 
12796 
12797     -----------------------------
12798     -- validate hierarchical_flag
12799     -----------------------------
12800 
12801     -- hierarchical_flag is lookup code in lookup type YES/NO
12802     validate_lookup (
12803         p_column                                => 'hierarchical_flag',
12804         p_lookup_type                           => 'YES/NO',
12805         p_column_value                          => p_relationship_type_rec.hierarchical_flag,
12806         x_return_status                         => x_return_status );
12807 
12808     /*IF G_DEBUG THEN
12809         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12810             'hierarchical_flag in lookup YES/NO. ' ||
12811             'x_return_status = ' || x_return_status, l_debug_prefix );
12812     END IF;
12813     */
12814     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12815            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'hierarchical_flag in lookup YES/NO. ' ||
12816             'x_return_status = ' || x_return_status,
12817                                   p_msg_level=>fnd_log.level_statement);
12818     END IF;
12819 
12820 
12821     -- hierarchical_flag is non-updateable
12822     IF p_create_update_flag = 'U' THEN
12823         validate_nonupdateable (
12824             p_column                                => 'hierarchical_flag',
12825             p_column_value                          => p_relationship_type_rec.hierarchical_flag,
12826             p_old_column_value                      => l_hierarchical_flag,
12827             x_return_status                         => x_return_status);
12828 
12829         /*IF g_debug THEN
12830             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12831                 'hierarchical_flag is non-updateable. ' ||
12832                 'x_return_status = ' || x_return_status, l_debug_prefix);
12833         END IF;
12834         */
12835         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12836            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'hierarchical_flag is non-updateable. ' ||
12837                 'x_return_status = ' || x_return_status,
12838                                   p_msg_level=>fnd_log.level_statement);
12839         END IF;
12840 
12841 
12842     END IF;
12843 
12844     ----------------------------------------------------------------------------
12845     -- validate combination of hierarchical_flag and allow_circular_relationship
12846     ----------------------------------------------------------------------------
12847     -- needed only during creation since these columns cannot be updated
12848     IF p_create_update_flag = 'C' THEN
12849         -- if hierarchical_flag = 'Y', then allow_circular_relationships must be 'N'
12850         IF NVL(p_relationship_type_rec.hierarchical_flag, 'N') = 'Y' THEN
12851             IF p_relationship_type_rec.allow_circular_relationships = 'Y' THEN
12852                 fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
12853                 fnd_message.set_token('COLUMN1', 'hierarchical_flag');
12854                 fnd_message.set_token('VALUE1', 'Y(Yes)');
12855                 fnd_message.set_token('COLUMN2', 'allow_circular_relationships');
12856                 fnd_message.set_token('VALUE2', 'N(No)');
12857                 fnd_msg_pub.add;
12858                 x_return_status := FND_API.G_RET_STS_ERROR;
12859             END IF;
12860         END IF;
12861         /*IF g_debug THEN
12862             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12863                 'if hierarchical_flag = ''Y'', then allow_circular_relationships must be ''N''. ' ||
12864                 'x_return_status = ' || x_return_status, l_debug_prefix);
12865         END IF;
12866         */
12867         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12868            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12869            p_message=>'if hierarchical_flag = ''Y'', then allow_circular_relationships must be ''N''. ' ||
12870                 'x_return_status = ' || x_return_status,
12871                                   p_msg_level=>fnd_log.level_statement);
12872         END IF;
12873 
12874     END IF;
12875 
12876     ---------------------------------------------------------------
12877     -- validate combination of hierarchical_flag and direction_code
12878     ---------------------------------------------------------------
12879     -- needed only during creation since these columns cannot be updated
12880     IF p_create_update_flag = 'C' THEN
12881         -- if hierarchical_flag = 'Y', the direction_code must be 'P' or 'C'
12882         IF NVL(p_relationship_type_rec.hierarchical_flag, 'N') = 'Y' THEN
12883             IF p_relationship_type_rec.direction_code = 'N' THEN
12884                 fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
12885                 fnd_message.set_token('COLUMN1', 'hierarchical_flag');
12886                 fnd_message.set_token('VALUE1', 'Y(Yes)');
12887                 fnd_message.set_token('COLUMN2', 'direction_code');
12888                 fnd_message.set_token('VALUE2', 'P(Parent)/C(Child)');
12889                 fnd_msg_pub.add;
12890                 x_return_status := FND_API.G_RET_STS_ERROR;
12891             END IF;
12892         END IF;
12893         /*IF g_debug THEN
12894             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12895                 'if hierarchical_flag = ''Y'', the direction_code must be ''P'' or ''C''. ' ||
12896                 'x_return_status = ' || x_return_status, l_debug_prefix);
12897         END IF;
12898         */
12899         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12900            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12901            p_message=>'if hierarchical_flag = ''Y'', the direction_code must be ''P'' or ''C''. ' ||
12902                 'x_return_status = ' || x_return_status,
12903                                   p_msg_level=>fnd_log.level_statement);
12904         END IF;
12905 
12906     END IF;
12907 
12908       -- check for duplicate role
12909 
12910       IF p_create_update_flag = 'C' THEN
12911       BEGIN
12912           SELECT count(*)
12913           INTO   l_count
12914           FROM   HZ_RELATIONSHIP_TYPES
12915           WHERE  ROLE = p_relationship_type_rec.forward_role
12916            OR    ROLE = p_relationship_type_rec.backward_role;
12917           IF l_count > 0 THEN
12918           fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
12919           fnd_message.set_token('COLUMN', 'role');
12920           fnd_msg_pub.add;
12921           x_return_status := fnd_api.g_ret_sts_error;
12922          END IF;
12923       END;
12924      END IF;
12925 
12926     -- validate role/rel_code
12927 
12928     IF p_create_update_flag = 'C' THEN
12929       IF ( p_relationship_type_rec.forward_role IS NOT NULL AND
12930            p_relationship_type_rec.forward_role <> fnd_api.g_miss_char) AND
12931           ( p_relationship_type_rec.backward_role IS NOT NULL AND
12932             p_relationship_type_rec.backward_role <> fnd_api.g_miss_char) THEN
12933         validate_rel_code(
12934            p_forward_rel_code          =>p_relationship_type_rec.forward_rel_code,
12935            p_backward_rel_code         =>p_relationship_type_rec.backward_rel_code,
12936            p_forward_role              => p_relationship_type_rec.forward_role,
12937            p_backward_role             => p_relationship_type_rec.backward_role,
12938            x_return_status             => x_return_status);
12939      END IF;
12940    END IF;
12941 
12942     -- validate lookup
12943     IF  p_create_update_flag = 'C' THEN
12944       IF p_relationship_type_rec.forward_role IS NOT NULL THEN
12945           validate_lookup (
12946               p_column                                => 'role',
12947               p_lookup_type                           => 'HZ_RELATIONSHIP_ROLE',
12948               p_column_value                          => p_relationship_type_rec.forward_role,
12949               x_return_status                         => x_return_status);
12950        END IF;
12951        IF p_relationship_type_rec.backward_role IS NOT NULL THEN
12952           validate_lookup (
12953               p_column                                => 'role',
12954               p_lookup_type                           => 'HZ_RELATIONSHIP_ROLE',
12955               p_column_value                          => p_relationship_type_rec.backward_role,
12956               x_return_status                         => x_return_status);
12957        END IF;
12958     END IF;
12959 
12960     ----------------------------------------------------------------------------
12961     -- validate combination of hierarchical_flag and allow_relate_to_self_flag
12962     ----------------------------------------------------------------------------
12963     -- needed only during creation since these columns cannot be updated
12964     IF p_create_update_flag = 'C' THEN
12965         -- if hierarchical_flag = 'Y', then allow_relate_to_self_flag must be 'N'
12966         IF NVL(p_relationship_type_rec.hierarchical_flag, 'N') = 'Y' THEN
12967             IF p_relationship_type_rec.allow_relate_to_self_flag = 'Y' THEN
12968                 fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
12969                 fnd_message.set_token('COLUMN1', 'hierarchical_flag');
12970                 fnd_message.set_token('VALUE1', 'Y(Yes)');
12971                 fnd_message.set_token('COLUMN2', 'allow_relate_to_self_flag');
12972                 fnd_message.set_token('VALUE2', 'N(No)');
12973                 fnd_msg_pub.add;
12974                 x_return_status := FND_API.G_RET_STS_ERROR;
12975             END IF;
12976         END IF;
12977         /*IF g_debug THEN
12978             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12979                 'if hierarchical_flag = ''Y'', then allow_relate_to_self_flag must be ''N''. ' ||
12980                 'x_return_status = ' || x_return_status, l_debug_prefix);
12981         END IF;
12982         */
12983         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
12984            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
12985            p_message=>'if hierarchical_flag = ''Y'', then allow_relate_to_self_flag must be ''N''. ' ||
12986                 'x_return_status = ' || x_return_status,
12987                                   p_msg_level=>fnd_log.level_statement);
12988         END IF;
12989 
12990     END IF;
12991 
12992 
12993     --------------------------------------------------------------------------
12994     -- validate combination of allow_circular_relationships and direction_code
12995     --------------------------------------------------------------------------
12996     -- neede only during creation since these columns cannot be updated
12997     IF p_create_update_flag = 'C' THEN
12998         -- if direction_code = 'N', the allow_circular_relationships must be 'Y'
12999         IF p_relationship_type_rec.direction_code = 'N' THEN
13000             IF NVL(p_relationship_type_rec.allow_circular_relationships, 'Y') = 'N' THEN
13001                 fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
13002                 fnd_message.set_token('COLUMN1', 'direction_code');
13003                 fnd_message.set_token('VALUE1', 'N(No)');
13004                 fnd_message.set_token('COLUMN2', 'allow_circular_relationships');
13005                 fnd_message.set_token('VALUE2', 'Y(Yes)');
13006                 fnd_msg_pub.add;
13007                 x_return_status := FND_API.G_RET_STS_ERROR;
13008             END IF;
13009         END IF;
13010         /*IF g_debug THEN
13011             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13012                 'if hierarchical_flag = ''Y'', the direction_code must be ''P'' or ''C''. ' ||
13013                 'x_return_status = ' || x_return_status, l_debug_prefix);
13014         END IF;
13015         */
13016         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13017            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13018            p_message=>'if hierarchical_flag = ''Y'', the direction_code must be ''P'' or ''C''. ' ||
13019                 'x_return_status = ' || x_return_status,
13020                                   p_msg_level=>fnd_log.level_statement);
13021         END IF;
13022 
13023     END IF;
13024 
13025     /* THIS UNNECESSARY VALIDATION HAS BEEN COMMENTED AFTER DISCUSSION WITH
13026        SRANGARA AND RPITTS, THE CONCLUSION OF WHICH IS THAT
13027        NON_HIERARCHICAL RELATIONSHIPS DO NOT NEED ANY VALUE
13028        FOR MULTIPLE_PARENT_ALLOWED,SINCE EVEN A SINGLE PARENT
13029        DOES NOT MAKE SENSE FOR A NON_HIERARCHICAL RELATIONSHIP TYPE.
13030        THE do_relationship_type IN HZ_RELATIONSHIP_TYPE_V2PUB WHICH
13031        DEFAULTS THE VALUE OF THIS FLAG TO "Y" FOR NON_HIERARCHICAL
13032        REL TYPES SHOULD ALSO BE CHANGED IN THE FUTURE.
13033 
13034       ----- VJN
13035     ------------------------------------------------------------------------
13036     -- validate combination of hierarchical_flag and multiple_parent_allowed
13037     ------------------------------------------------------------------------
13038     -- neede only during creation since these columns cannot be updated
13039     IF p_create_update_flag = 'C' THEN
13040         -- if hierarchical_flag = 'N', then multiple_parent_allowed must be 'Y'
13041         IF NVL(p_relationship_type_rec.hierarchical_flag, 'N') = 'N' THEN
13042             IF NVL(p_relationship_type_rec.multiple_parent_allowed, 'Y') = 'N' THEN
13043                 fnd_message.set_name('AR', 'HZ_API_VAL_DEP_FIELDS');
13044                 fnd_message.set_token('COLUMN1', 'hierarchical_flag');
13045                 fnd_message.set_token('VALUE1', 'N(No)');
13046                 fnd_message.set_token('COLUMN2', 'multiple_parent_allowed');
13047                 fnd_message.set_token('VALUE2', 'Y(Yes)');
13048                 fnd_msg_pub.add;
13049                 x_return_status := FND_API.G_RET_STS_ERROR;
13050             END IF;
13051         END IF;
13052 
13053         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13054            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13055            p_message=>'if hierarchical_flag = ''N'', the multiple_parent_allowed must be ''Y''. ' ||
13056                 'x_return_status = ' || x_return_status,
13057                                   p_msg_level=>fnd_log.level_statement);
13058         END IF;
13059 
13060     END IF;
13061 
13062     */
13063 
13064 
13065     --------------------------------------------------------------------------------
13066     -- validate that all relationship type records with same relationship_type value
13067     -- have same values for hierarchical_flag
13068     --------------------------------------------------------------------------------
13069     -- needed only during creation since hierarchical_flag is not updatable
13070     IF p_create_update_flag = 'C' THEN
13071         BEGIN
13072             SELECT HIERARCHICAL_FLAG
13073             INTO   l_hierarchical_flag
13074             FROM   HZ_RELATIONSHIP_TYPES
13075             WHERE  RELATIONSHIP_TYPE = p_relationship_type_rec.relationship_type
13076             AND    ROWNUM = 1;
13077 
13078             IF NVL(p_relationship_type_rec.hierarchical_flag, 'N')
13079                      <> NVL(l_hierarchical_flag, 'N')
13080                    and
13081                NVL(p_relationship_type_rec.hierarchical_flag, 'Y')
13082                      <> NVL(l_hierarchical_flag, 'Y')
13083                 THEN
13084                 fnd_message.set_name('AR', 'HZ_DIFF_VALUE_NOT_ALLOWED');
13085                 fnd_message.set_token('ENTITY', 'relationship type');
13086                 fnd_message.set_token('COLUMN1', 'relationship_type');
13087                 fnd_message.set_token('COLUMN2', 'hierarchical_flag');
13088                 fnd_msg_pub.add;
13089                 x_return_status := FND_API.G_RET_STS_ERROR;
13090             END IF;
13091 
13092         EXCEPTION
13093             -- if no data found, then its fine since this is the first record
13094             WHEN NO_DATA_FOUND THEN
13095                 NULL;
13096         END;
13097         /*IF g_debug THEN
13098             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13099                 'all relationship type records with same relationship_type value must have same values for hierarchical_flag. ' ||
13100                 'x_return_status = ' || x_return_status, l_debug_prefix);
13101         END IF;
13102         */
13103         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13104            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13105            p_message=>'all relationship type records with same relationship_type value must have same values for hierarchical_flag. ' ||
13106                 'x_return_status = ' || x_return_status,
13107                                   p_msg_level=>fnd_log.level_statement);
13108         END IF;
13109 
13110     END IF;
13111 
13112     --------------------------------------------------------------------------------
13113     -- validate that all relationship type records with same relationship_type value
13114     -- have same values for allow_circular_relationships
13115     --------------------------------------------------------------------------------
13116     -- needed only during creation since allow_circular_relationships is not updatable
13117     IF p_create_update_flag = 'C' THEN
13118         BEGIN
13119             SELECT ALLOW_CIRCULAR_RELATIONSHIPS
13120             INTO   l_allow_circular_relationships
13121             FROM   HZ_RELATIONSHIP_TYPES
13122             WHERE  RELATIONSHIP_TYPE = p_relationship_type_rec.relationship_type
13123             AND    ROWNUM = 1;
13124 
13125             IF NVL(p_relationship_type_rec.allow_circular_relationships, 'N') <>                   NVL(l_allow_circular_relationships, 'N')
13126                and
13127              NVL(p_relationship_type_rec.allow_circular_relationships, 'Y') <>
13128                    NVL(l_allow_circular_relationships, 'Y')
13129                 THEN
13130                 fnd_message.set_name('AR', 'HZ_DIFF_VALUE_NOT_ALLOWED');
13131                 fnd_message.set_token('ENTITY', 'relationship type');
13132                 fnd_message.set_token('COLUMN1', 'relationship_type');
13133                 fnd_message.set_token('COLUMN2', 'allow_circular_relationships');
13134                 fnd_msg_pub.add;
13135                 x_return_status := FND_API.G_RET_STS_ERROR;
13136             END IF;
13137 
13138         EXCEPTION
13139             -- if no data found, then its fine since this is the first record
13140             WHEN NO_DATA_FOUND THEN
13141                 NULL;
13142         END;
13143 
13144         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13145            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13146           p_message=>'all relationship type records with same relationship_type value must have same values for'||
13147                       ' allow_circular_relationships. ' ||
13148                 'x_return_status = ' || x_return_status,
13149                                   p_msg_level=>fnd_log.level_statement);
13150         END IF;
13151 
13152     END IF;
13153 
13154     --------------------------------------------------------------------------------
13155     -- validate that all relationship type records with same relationship_type value
13156     -- have same values for multiple_parent_allowed
13157     --------------------------------------------------------------------------------
13158     -- needed only during creation since multiple_parent_allowed is not updatable
13159     IF p_create_update_flag = 'C' THEN
13160         BEGIN
13161             SELECT MULTIPLE_PARENT_ALLOWED
13162             INTO   l_multiple_parent_allowed
13163             FROM   HZ_RELATIONSHIP_TYPES
13164             WHERE  RELATIONSHIP_TYPE = p_relationship_type_rec.relationship_type
13165             AND    ROWNUM = 1;
13166 
13167             IF NVL(p_relationship_type_rec.multiple_parent_allowed, 'N') <>
13168                           NVL(l_multiple_parent_allowed, 'N')
13169                and
13170                NVL(p_relationship_type_rec.multiple_parent_allowed, 'Y') <>
13171                         NVL(l_multiple_parent_allowed, 'Y')
13172                 THEN
13173                 fnd_message.set_name('AR', 'HZ_DIFF_VALUE_NOT_ALLOWED');
13174                 fnd_message.set_token('ENTITY', 'relationship type');
13175                 fnd_message.set_token('COLUMN1', 'relationship_type');
13176                 fnd_message.set_token('COLUMN2', 'multiple_parent_allowed');
13177                 fnd_msg_pub.add;
13178                 x_return_status := FND_API.G_RET_STS_ERROR;
13179             END IF;
13180 
13181         EXCEPTION
13182             -- if no data found, then its fine since this is the first record
13183             WHEN NO_DATA_FOUND THEN
13184                 NULL;
13185         END;
13186         /*IF g_debug THEN
13187             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13188                 'all relationship type records with same relationship_type value must have same values for multiple_parent_allowed. ' ||
13189                 'x_return_status = ' || x_return_status, l_debug_prefix);
13190         END IF;
13191         */
13192         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13193            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13194            p_message=>'all relationship type records with same relationship_type value must have same values for multiple_parent_allowed. ' ||
13195                                             'x_return_status = ' || x_return_status,
13196                                   p_msg_level=>fnd_log.level_statement);
13197         END IF;
13198 
13199     END IF;
13200 
13201     -----------------------------------
13202     -- validate incl_unrelated_entities
13203     -----------------------------------
13204 
13205     -- incl_unrelated_entities is lookup code in lookup type YES/NO
13206     validate_lookup (
13207         p_column                                => 'incl_unrelated_entities',
13208         p_lookup_type                           => 'YES/NO',
13209         p_column_value                          => p_relationship_type_rec.incl_unrelated_entities,
13210         x_return_status                         => x_return_status );
13211 
13212     /*IF G_DEBUG THEN
13213         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13214             'incl_unrelated_entities in lookup YES/NO. ' ||
13215             'x_return_status = ' || x_return_status, l_debug_prefix );
13216     END IF;
13217     */
13218     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13219            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'incl_unrelated_entities in lookup YES/NO. ' ||
13220                                              'x_return_status = ' || x_return_status,
13221                                   p_msg_level=>fnd_log.level_statement);
13222     END IF;
13223 
13224 
13225     -----------------------------------
13226     -- validate multiple_parent_allowed
13227     -----------------------------------
13228 
13229     -- multiple_parent_allowed is lookup code in lookup type YES/NO
13230     validate_lookup (
13231         p_column                                => 'multiple_parent_allowed',
13232         p_lookup_type                           => 'YES/NO',
13233         p_column_value                          => p_relationship_type_rec.multiple_parent_allowed,
13234         x_return_status                         => x_return_status );
13235 
13236     /*IF G_DEBUG THEN
13237         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13238             'multiple_parent_allowed in lookup YES/NO. ' ||
13239             'x_return_status = ' || x_return_status, l_debug_prefix );
13240     END IF;
13241     */
13242     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13243            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'multiple_parent_allowed in lookup YES/NO. ' ||
13244             'x_return_status = ' || x_return_status,
13245                                   p_msg_level=>fnd_log.level_statement);
13246     END IF;
13247 
13248 
13249     -- multiple_parent_allowed is non-updateable
13250     IF p_create_update_flag = 'U' THEN
13251         validate_nonupdateable (
13252             p_column                                => 'multiple_parent_allowed',
13253             p_column_value                          => p_relationship_type_rec.multiple_parent_allowed,
13254             p_old_column_value                      => l_multiple_parent_allowed,
13255             x_return_status                         => x_return_status);
13256 
13257         /*IF g_debug THEN
13258             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13259                 'multiple_parent_allowed is non-updateable. ' ||
13260                 'x_return_status = ' || x_return_status, l_debug_prefix);
13261         END IF;
13262         */
13263         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13264            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'multiple_parent_allowed is non-updateable. ' ||
13265                 'x_return_status = ' || x_return_status,
13266                                   p_msg_level=>fnd_log.level_statement);
13267         END IF;
13268 
13269 
13270     END IF;
13271 
13272       --------------------------------------
13273       -- validate created_by_module
13274       --------------------------------------
13275 
13276       validate_created_by_module(
13277         p_create_update_flag     => p_create_update_flag,
13278         p_created_by_module      => p_relationship_type_rec.created_by_module,
13279         p_old_created_by_module  => l_created_by_module,
13280         x_return_status          => x_return_status);
13281 
13282       --------------------------------------
13283       -- validate application_id
13284       --------------------------------------
13285 
13286       validate_application_id(
13287         p_create_update_flag     => p_create_update_flag,
13288         p_application_id         => p_relationship_type_rec.application_id,
13289         p_old_application_id     => l_application_id,
13290         x_return_status          => x_return_status);
13291 
13292       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
13293         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_relationship_type (-)',
13294                                p_msg_level=>fnd_log.level_procedure);
13295     END IF;
13296 
13297 --bug 3491584
13298     IF (p_create_update_flag = 'C') THEN
13299       IF((p_relationship_type_rec.forward_rel_code = p_relationship_type_rec.backward_rel_code)
13300           AND (p_relationship_type_rec.subject_type <> p_relationship_type_rec.object_type))
13301       THEN
13302       fnd_message.set_name('AR', 'HZ_API_RELTYPE_INVALID');
13303       fnd_msg_pub.add;
13304       x_return_status := fnd_api.g_ret_sts_error;
13305 
13306       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13307                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13308                 p_message=>'Same subject and object type because the relationship phrase pair has the same subject (forward) and object (backward) phrase. ' ||
13309                   'x_return_status = ' || x_return_status,
13310                   p_msg_level=>fnd_log.level_statement);
13311           END IF;
13312       END IF;
13313     END IF;
13314 
13315       --disable_debug;
13316 
13317   END validate_relationship_type;
13318 
13319   /**
13320    * PROCEDURE validate_relationship
13321    *
13322    * DESCRIPTION
13323    *     Validates relationship record. Checks for
13324    *         uniqueness
13325    *         lookup types
13326    *         mandatory columns
13327    *         non-updateable fields
13328    *         foreign key validations
13329    *         other validations
13330    *
13331    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
13332    *
13333    * ARGUMENTS
13334    *   IN:
13335    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
13336    *     p_relationship_rec             Relationship record.
13337    *     p_rowid                        Rowid of the record (used only in update mode).
13338    *   IN/OUT:
13339    *     x_return_status                Return status after the call. The status can
13340    *                                    be FND_API.G_RET_STS_SUCCESS (success),
13341    *                                    fnd_api.g_ret_sts_error (error),
13342    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
13343    *
13344    * NOTES
13345    *
13346    * MODIFICATION HISTORY
13347    *
13348    *   07-23-2001    Indrajit Sen       o Created.
13349    *   13-DEC-2001   Joe del Callar     Bug 2145637: Modified to use the new
13350    *                                    time-dependent date overlap check.
13351    */
13352 
13353   PROCEDURE validate_relationship(
13354     p_create_update_flag  IN      VARCHAR2,
13355     p_relationship_rec    IN      hz_relationship_v2pub.relationship_rec_type,
13356     p_rowid               IN      ROWID ,
13357     x_return_status       IN OUT NOCOPY  VARCHAR2
13358   ) IS
13359     l_count                 NUMBER;
13360     l_subject_id            NUMBER := p_relationship_rec.subject_id;
13361     l_object_id             NUMBER := p_relationship_rec.object_id;
13362     l_relationship_type     hz_relationships.relationship_type%TYPE := p_relationship_rec.relationship_type;
13363     l_relationship_code     hz_relationships.relationship_code%TYPE := p_relationship_rec.relationship_code;
13364     l_subject_type          hz_relationships.subject_type%TYPE := p_relationship_rec.subject_type;
13365     l_object_type           hz_relationships.object_type%TYPE := p_relationship_rec.object_type;
13366     l_subject_table_name    hz_relationships.subject_table_name%TYPE := p_relationship_rec.subject_table_name;
13367     l_object_table_name     hz_relationships.object_table_name%TYPE := p_relationship_rec.object_table_name;
13368     l_party_id              NUMBER;
13369     l_content_source_type   hz_relationships.content_source_type%TYPE;
13370     l_start_date            DATE := p_relationship_rec.start_date;
13371     l_end_date              DATE := p_relationship_rec.end_date;
13372     l_in                    VARCHAR2(1);
13373     l_overlap               VARCHAR2(1);
13374     l_created_by_module     VARCHAR2(150);
13375     l_application_id        NUMBER;
13376     l_status                VARCHAR2(1);
13377     l_debug_prefix          VARCHAR2(30) := '';
13378 
13379     -- Bug 2197181: Added for mix-n-match
13380     db_actual_content_source   hz_relationships.actual_content_source%TYPE;
13381 
13382 
13383     -- cursor to get all the relationship records...
13384     -- for given subject_id, object_id, relationship_code
13385     -- bug - 2528427, added relationship type to the where...
13386     -- clause so that time overlap is checked among records with...
13387     -- same relationship type, relationship code, subject id and object id
13388     CURSOR c1 (
13389       p_data_source           VARCHAR2
13390     ) IS
13391       SELECT hr.start_date,
13392              hr.end_date,
13393              hr.relationship_id,
13394              hr.status
13395       FROM   hz_relationships hr
13396       WHERE  hr.subject_id = l_subject_id
13397       AND    hr.object_id = l_object_id
13398       AND    hr.subject_table_name = l_subject_table_name
13399       AND    hr.subject_type = l_subject_type
13400       AND    hr.object_table_name = l_object_table_name
13401       AND    hr.object_type = l_object_type
13402       AND    hr.relationship_code = l_relationship_code
13403       AND    hr.relationship_type = l_relationship_type
13404       --AND hr.directional_flag = 'F'
13405       AND    hr.status = 'A'
13406       AND    hr.actual_content_source = p_data_source
13407       AND    NVL(p_relationship_rec.relationship_id, fnd_api.g_miss_num) <> hr.relationship_id;
13408 
13409 -- Bug 3294936 : Comment rownum = 1 so that the cursor picks all records
13410 --               with same relationship type between same subject and object.
13411 
13412 --      AND    ROWNUM = 1;
13413 
13414 
13415     r1                      c1%ROWTYPE;
13416 
13417     l_dummy                 VARCHAR2(1);
13418     l_count                 NUMBER;
13419     l_code                  VARCHAR2(30);
13420   BEGIN
13421     --enable_debug;
13422 
13423     -- Debug info.
13424     /*IF g_debug THEN
13425         hz_utility_v2pub.debug ('validate_relationship (+)');
13426     END IF;
13427     */
13428     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
13429         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_relationship (+)',
13430                                p_msg_level=>fnd_log.level_procedure);
13431     END IF;
13432 
13433     -- select columns needed to be checked from table during update
13434     IF (p_create_update_flag = 'U') THEN
13435 
13436     -- Bug 2197181: selecting actual_content_source for mix-n-match
13437 
13438       SELECT subject_id,
13439              subject_type,
13440              subject_table_name,
13441              object_id,
13442              object_type,
13443              object_table_name,
13444              relationship_code,
13445              relationship_type,
13446              party_id,
13447              content_source_type,
13448              start_date,
13449              end_date,
13450              status,
13451              created_by_module,
13452              application_id,
13453              actual_content_source
13454       INTO   l_subject_id,
13455              l_subject_type,
13456              l_subject_table_name,
13457              l_object_id,
13458              l_object_type,
13459              l_object_table_name,
13460              l_relationship_code,
13461              l_relationship_type,
13462              l_party_id,
13463              l_content_source_type,
13464              l_start_date,
13465              l_end_date,
13466              l_status,
13467              l_created_by_module,
13468              l_application_id,
13469              db_actual_content_source
13470       FROM   hz_relationships
13471       WHERE  ROWID = p_rowid;
13472     END IF;
13473 
13474     -----------------------------
13475     -- validate relationship_type
13476     -----------------------------
13477 
13478     -- relationship_type is mandatory
13479     validate_mandatory (
13480       p_create_update_flag    => p_create_update_flag,
13481       p_column                => 'relationship_type',
13482       p_column_value          => p_relationship_rec.relationship_type,
13483       x_return_status         => x_return_status);
13484 
13485     /*IF g_debug THEN
13486       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'relationship_type is mandatory. ' ||
13487                                'x_return_status = ' || x_return_status,
13488                              l_debug_prefix);
13489     END IF;
13490     */
13491     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13492            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'relationship_type is mandatory. ' ||
13493                                'x_return_status = ' || x_return_status,
13494                                   p_msg_level=>fnd_log.level_statement);
13495     END IF;
13496 
13497     -- relationship_type is non-updateable
13498     IF p_create_update_flag = 'U' THEN
13499       validate_nonupdateable (
13500         p_column                => 'relationship_type',
13501         p_column_value          => p_relationship_rec.relationship_type,
13502         p_old_column_value      => l_relationship_type,
13503         x_return_status         => x_return_status
13504       );
13505 
13506       /*IF g_debug THEN
13507         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'relationship_type is non-updateable. ' ||
13508                                  'x_return_status = ' || x_return_status,
13509                                l_debug_prefix);
13510       END IF;
13511       */
13512       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13513            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'relationship_type is non-updateable. ' ||
13514                                  'x_return_status = ' || x_return_status,
13515                                   p_msg_level=>fnd_log.level_statement);
13516       END IF;
13517 
13518     END IF;
13519 
13520     -----------------------------
13521     -- validate relationship_code
13522     -----------------------------
13523 
13524     -- relationship_code is mandatory
13525     validate_mandatory (
13526       p_create_update_flag      => p_create_update_flag,
13527       p_column                  => 'relationship_code',
13528       p_column_value            => p_relationship_rec.relationship_code,
13529       x_return_status           => x_return_status
13530     );
13531 
13532     /*IF g_debug THEN
13533       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'relationship_code is mandatory. ' ||
13534                                'x_return_status = ' || x_return_status,
13535                              l_debug_prefix);
13536     END IF;
13537     */
13538     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13539            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'relationship_code is mandatory. ' ||
13540                                'x_return_status = ' || x_return_status,
13541                                   p_msg_level=>fnd_log.level_statement);
13542     END IF;
13543 
13544     -- relationship_code is non-updateable
13545     IF p_create_update_flag = 'U' THEN
13546       validate_nonupdateable (
13547         p_column                => 'relationship_code',
13548         p_column_value          => p_relationship_rec.relationship_code,
13549         p_old_column_value      => l_relationship_code,
13550         x_return_status         => x_return_status
13551       );
13552 
13553       /*IF g_debug THEN
13554         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'relationship_code is non-updateable. ' ||
13555                                  'x_return_status = ' || x_return_status,
13556                                l_debug_prefix);
13557       END IF;
13558       */
13559       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13560            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'relationship_code is non-updateable. ' ||
13561                                  'x_return_status = ' || x_return_status,
13562                                   p_msg_level=>fnd_log.level_statement);
13563       END IF;
13564     END IF;
13565 
13566     -- relationship_code is lookup code in lookup type PARTY_RELATIONS_TYPE
13567     IF p_create_update_flag = 'C' THEN
13568       validate_lookup (
13569         p_column                => 'relationship_code',
13570         p_lookup_type           => 'PARTY_RELATIONS_TYPE',
13571         p_column_value          => p_relationship_rec.relationship_code,
13572         x_return_status         => x_return_status
13573       );
13574 
13575       /*IF g_debug THEN
13576         hz_utility_v2pub.debug (
13577           'relationship_code is lookup code in lookup type PARTY_RELATIONS_TYPE. ' ||
13578             'x_return_status = ' || x_return_status,
13579           l_debug_prefix);
13580       END IF;
13581       */
13582       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13583            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13584            p_message=>'relationship_code is lookup code in lookup type PARTY_RELATIONS_TYPE. ' ||
13585                         'x_return_status = ' || x_return_status,
13586                                   p_msg_level=>fnd_log.level_statement);
13587       END IF;
13588     END IF;
13589 
13590     ----------------------
13591     -- validate subject_id
13592     ----------------------
13593 /****Logical APIs - validation not required****/
13594   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
13595     -- subject_id is mandatory
13596     validate_mandatory (
13597       p_create_update_flag                    => p_create_update_flag,
13598       p_column                                => 'subject_id',
13599       p_column_value                          => p_relationship_rec.subject_id,
13600       x_return_status                         => x_return_status);
13601 
13602     /*IF g_debug THEN
13603       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_id is mandatory. ' ||
13604                                'x_return_status = ' || x_return_status,
13605                              l_debug_prefix);
13606     END IF;
13607     */
13608     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13609            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_id is mandatory. ' ||
13610                                'x_return_status = ' || x_return_status,
13611                                   p_msg_level=>fnd_log.level_statement);
13612     END IF;
13613 
13614     -- subject_id is non-updateable
13615     IF p_create_update_flag = 'U' THEN
13616       validate_nonupdateable (
13617         p_column                => 'subject_id',
13618         p_column_value          => p_relationship_rec.subject_id,
13619         p_old_column_value      => l_subject_id,
13620         x_return_status         => x_return_status
13621       );
13622 
13623       /*IF g_debug THEN
13624         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_id is non-updateable. ' ||
13625                                  'x_return_status = ' || x_return_status,
13626                                l_debug_prefix);
13627       END IF;
13628       */
13629       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13630            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_id is non-updateable. ' ||
13631                                  'x_return_status = ' || x_return_status,
13632                                   p_msg_level=>fnd_log.level_statement);
13633       END IF;
13634 
13635     END IF;
13636   END IF;
13637 
13638     -- check whether subject_id belongs to subject_type
13639     IF p_relationship_rec.subject_id IS NOT NULL
13640        AND p_relationship_rec.subject_id <> fnd_api.g_miss_num
13641        AND p_create_update_flag = 'C'
13642     THEN
13643       l_in := hz_relationship_type_v2pub.in_instance_sets (
13644                 p_relationship_rec.subject_type,
13645                 p_relationship_rec.subject_id
13646               );
13647 
13648       IF l_in = 'N' THEN
13649         fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
13650         fnd_message.set_token('FK', 'subject_id');
13651         fnd_message.set_token('COLUMN',
13652                               lower(p_relationship_rec.subject_type)||' id');
13653         fnd_message.set_token('TABLE', p_relationship_rec.subject_table_name);
13654         fnd_msg_pub.add;
13655         x_return_status := fnd_api.g_ret_sts_error;
13656       END IF;
13657 
13658       /*IF g_debug THEN
13659         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_id belongs to subject_type. ' ||
13660                                  'x_return_status = ' || x_return_status,
13661                                l_debug_prefix);
13662       END IF;
13663       */
13664       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13665            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_id belongs to subject_type. ' ||
13666                                  'x_return_status = ' || x_return_status,
13667                                   p_msg_level=>fnd_log.level_statement);
13668       END IF;
13669 
13670     END IF;
13671 
13672     ------------------------------
13673     -- validate subject_table_name
13674     ------------------------------
13675 /****Logical APIs - validation not required****/
13676   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
13677     -- subject_table_name is mandatory
13678     validate_mandatory (
13679       p_create_update_flag      => p_create_update_flag,
13680       p_column                  => 'subject_table_name',
13681       p_column_value            => p_relationship_rec.subject_table_name,
13682       x_return_status           => x_return_status);
13683 
13684     /*IF g_debug THEN
13685       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_table_name is mandatory. ' ||
13686                                'x_return_status = ' || x_return_status,
13687                              l_debug_prefix);
13688     END IF;
13689     */
13690     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13691            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_table_name is mandatory. ' ||
13692                                'x_return_status = ' || x_return_status,
13693                                   p_msg_level=>fnd_log.level_statement);
13694     END IF;
13695 
13696     -- subject_table_name is non-updateable
13697     IF p_create_update_flag = 'U' THEN
13698       validate_nonupdateable (
13699         p_column                => 'subject_table_name',
13700         p_column_value          => p_relationship_rec.subject_table_name,
13701         p_old_column_value      => l_subject_table_name,
13702         x_return_status         => x_return_status);
13703 
13704       /*IF g_debug THEN
13705         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_table_name is non-updateable. ' ||
13706                                  'x_return_status = ' || x_return_status,
13707                                l_debug_prefix);
13708       END IF;
13709       */
13710       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13711            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_table_name is non-updateable. ' ||
13712                                  'x_return_status = ' || x_return_status,
13713                                   p_msg_level=>fnd_log.level_statement);
13714       END IF;
13715 
13716     END IF;
13717 
13718     -- subject_table_name has foreign key fnd_objects.obj_name
13719     -- do not need to check during update because subject_table_name is
13720     -- non-updateable.
13721     IF p_create_update_flag = 'C'
13722        AND p_relationship_rec.subject_table_name IS NOT NULL
13723        AND p_relationship_rec.subject_table_name <> fnd_api.g_miss_char
13724     THEN
13725       BEGIN
13726         SELECT 'Y'
13727         INTO   l_dummy
13728         FROM   fnd_objects fo
13729         WHERE  fo.obj_name = p_relationship_rec.subject_table_name;
13730       EXCEPTION
13731         WHEN NO_DATA_FOUND THEN
13732           fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
13733           fnd_message.set_token('FK', 'subject_table_name');
13734           fnd_message.set_token('COLUMN', 'obj_name');
13735           fnd_message.set_token('TABLE', 'fnd_objects');
13736           fnd_msg_pub.add;
13737           x_return_status := fnd_api.g_ret_sts_error;
13738       END;
13739 
13740       /*IF g_debug THEN
13741         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13742           'subject_table_name has foreign key fnd_objects.obj_name. ' ||
13743             'x_return_status = ' || x_return_status,
13744           l_debug_prefix
13745         );
13746       END IF;
13747       */
13748       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13749            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13750            p_message=>'subject_table_name has foreign key fnd_objects.obj_name. ' ||
13751             'x_return_status = ' || x_return_status,
13752                                   p_msg_level=>fnd_log.level_statement);
13753       END IF;
13754 
13755     END IF;
13756   END IF;
13757 
13758     ------------------------
13759     -- validate subject_type
13760     ------------------------
13761 /****Logical APIs - validation not required****/
13762   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
13763     -- subject_type is mandatory
13764     validate_mandatory (
13765       p_create_update_flag      => p_create_update_flag,
13766       p_column                  => 'subject_type',
13767       p_column_value            => p_relationship_rec.subject_type,
13768       x_return_status           => x_return_status
13769     );
13770 
13771     /*IF g_debug THEN
13772       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_type is mandatory. ' ||
13773                                'x_return_status = ' || x_return_status,
13774                              l_debug_prefix);
13775     END IF;
13776     */
13777     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13778            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_type is mandatory. ' ||
13779                                'x_return_status = ' || x_return_status,
13780                                   p_msg_level=>fnd_log.level_statement);
13781     END IF;
13782 
13783     -- subject_type is non-updateable
13784     IF p_create_update_flag = 'U' THEN
13785       validate_nonupdateable (
13786         p_column                => 'subject_type',
13787         p_column_value          => p_relationship_rec.subject_type,
13788         p_old_column_value      => l_subject_type,
13789         x_return_status         => x_return_status);
13790 
13791       /*IF g_debug THEN
13792         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'subject_type is non-updateable. ' ||
13793                                  'x_return_status = ' || x_return_status,
13794                                l_debug_prefix);
13795       END IF;
13796       */
13797       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13798            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'subject_type is non-updateable. ' ||
13799                                  'x_return_status = ' || x_return_status,
13800                                   p_msg_level=>fnd_log.level_statement);
13801       END IF;
13802     END IF;
13803 
13804     -- subject_type has foreign key fnd_object_instance_sets.instance_set_name
13805     -- do not need to check during update because subject_type is
13806     -- non-updateable.
13807     IF p_create_update_flag = 'C'
13808        AND p_relationship_rec.subject_type IS NOT NULL
13809        AND p_relationship_rec.subject_type <> fnd_api.g_miss_char
13810     THEN
13811       BEGIN
13812         SELECT 'Y'
13813         INTO   l_dummy
13814         FROM   fnd_object_instance_sets fois
13815         WHERE  fois.instance_set_name = p_relationship_rec.subject_type;
13816       EXCEPTION
13817         WHEN NO_DATA_FOUND THEN
13818           fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
13819           fnd_message.set_token('FK', 'subject_type');
13820           fnd_message.set_token('COLUMN', 'instance_set_name');
13821           fnd_message.set_token('TABLE', 'fnd_object_instance_sets');
13822           fnd_msg_pub.add;
13823           x_return_status := fnd_api.g_ret_sts_error;
13824       END;
13825 
13826       /*IF g_debug THEN
13827         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13828           'subject_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
13829             'x_return_status = ' || x_return_status,
13830           l_debug_prefix
13831         );
13832       END IF;
13833       */
13834       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13835            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13836            p_message=>'subject_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
13837             'x_return_status = ' || x_return_status,
13838                                   p_msg_level=>fnd_log.level_statement);
13839       END IF;
13840 
13841     END IF;
13842   END IF;
13843 
13844     ---------------------
13845     -- validate object_id
13846     ---------------------
13847 /****Logical APIs - validation not required****/
13848   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
13849     -- object_id is mandatory
13850     validate_mandatory (
13851       p_create_update_flag                    => p_create_update_flag,
13852       p_column                                => 'object_id',
13853       p_column_value                          => p_relationship_rec.object_id,
13854       x_return_status                         => x_return_status
13855     );
13856 
13857     /*IF g_debug THEN
13858       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_id is mandatory. ' ||
13859                                'x_return_status = ' || x_return_status,
13860                              l_debug_prefix);
13861     END IF;
13862     */
13863     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13864            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_id is mandatory. ' ||
13865                                'x_return_status = ' || x_return_status,
13866                                   p_msg_level=>fnd_log.level_statement);
13867     END IF;
13868 
13869     -- object_id is non-updateable
13870     IF p_create_update_flag = 'U' THEN
13871       validate_nonupdateable (
13872         p_column                => 'object_id',
13873         p_column_value          => p_relationship_rec.object_id,
13874         p_old_column_value      => l_object_id,
13875         x_return_status         => x_return_status);
13876 
13877       /*IF g_debug THEN
13878         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_id is non-updateable. ' ||
13879                                  'x_return_status = ' || x_return_status,
13880                                l_debug_prefix);
13881       END IF;
13882       */
13883       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13884            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_id is non-updateable. ' ||
13885                                  'x_return_status = ' || x_return_status,
13886                                   p_msg_level=>fnd_log.level_statement);
13887      END IF;
13888 
13889     END IF;
13890   END IF;
13891 
13892     -- check whether object_id belongs to object_type
13893     IF p_relationship_rec.object_id IS NOT NULL
13894        AND p_relationship_rec.object_id <> fnd_api.g_miss_num
13895        AND p_create_update_flag = 'C'
13896     THEN
13897       l_in := hz_relationship_type_v2pub.in_instance_sets (
13898                 p_relationship_rec.object_type,
13899                 p_relationship_rec.object_id
13900               );
13901 
13902       IF l_in = 'N' THEN
13903         fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
13904         fnd_message.set_token('FK', 'object_id');
13905         fnd_message.set_token('COLUMN',
13906                               LOWER(p_relationship_rec.object_type)||' id');
13907         fnd_message.set_token('TABLE', p_relationship_rec.object_table_name);
13908         fnd_msg_pub.add;
13909         x_return_status := fnd_api.g_ret_sts_error;
13910       END IF;
13911 
13912       /*IF g_debug THEN
13913         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_id belongs to object_type. ' ||
13914                                  'x_return_status = ' || x_return_status,
13915                                l_debug_prefix);
13916       END IF;
13917       */
13918       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13919            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_id belongs to object_type. ' ||
13920                                  'x_return_status = ' || x_return_status,
13921                                   p_msg_level=>fnd_log.level_statement);
13922       END IF;
13923 
13924     END IF;
13925 
13926     -----------------------------
13927     -- validate object_table_name
13928     -----------------------------
13929 /****Logical APIs - validation not required****/
13930   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
13931     -- object_table_name is mandatory
13932     validate_mandatory (
13933       p_create_update_flag      => p_create_update_flag,
13934       p_column                  => 'object_table_name',
13935       p_column_value            => p_relationship_rec.object_table_name,
13936       x_return_status           => x_return_status
13937     );
13938 
13939     /*IF g_debug THEN
13940       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_table_name is mandatory. ' ||
13941                                'x_return_status = ' || x_return_status,
13942                              l_debug_prefix);
13943     END IF;
13944     */
13945     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13946            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_table_name is mandatory. ' ||
13947                                'x_return_status = ' || x_return_status,
13948                                   p_msg_level=>fnd_log.level_statement);
13949     END IF;
13950 
13951     -- object_table_name is non-updateable
13952     IF p_create_update_flag = 'U' THEN
13953       validate_nonupdateable (
13954         p_column                => 'object_table_name',
13955         p_column_value          => p_relationship_rec.object_table_name,
13956         p_old_column_value      => l_object_table_name,
13957         x_return_status         => x_return_status
13958       );
13959 
13960       /*IF g_debug THEN
13961         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_table_name is non-updateable. ' ||
13962                                  'x_return_status = ' || x_return_status,
13963                                l_debug_prefix);
13964       END IF;
13965       */
13966       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
13967            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_table_name is non-updateable. ' ||
13968                                  'x_return_status = ' || x_return_status,
13969                                   p_msg_level=>fnd_log.level_statement);
13970       END IF;
13971 
13972     END IF;
13973 
13974     -- object_table_name has foreign key fnd_objects.obj_name
13975     -- do not need to check during update because object_table_name is
13976     -- non-updateable.
13977     IF p_create_update_flag = 'C'
13978        AND p_relationship_rec.object_table_name IS NOT NULL
13979        AND p_relationship_rec.object_table_name <> fnd_api.g_miss_char
13980     THEN
13981       BEGIN
13982         SELECT 'Y'
13983         INTO   l_dummy
13984         FROM   fnd_objects fo
13985         WHERE  fo.obj_name = p_relationship_rec.object_table_name;
13986       EXCEPTION
13987         WHEN NO_DATA_FOUND THEN
13988           fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
13989           fnd_message.set_token('FK', 'object_table_name');
13990           fnd_message.set_token('COLUMN', 'obj_name');
13991           fnd_message.set_token('TABLE', 'fnd_objects');
13992           fnd_msg_pub.add;
13993           x_return_status := fnd_api.g_ret_sts_error;
13994       END;
13995 
13996       /*IF g_debug THEN
13997         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
13998           'object_table_name has foreign key fnd_objects.obj_name. ' ||
13999             'x_return_status = ' || x_return_status,
14000           l_debug_prefix
14001         );
14002       END IF;
14003       */
14004       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14005            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14006            p_message=>'object_table_name has foreign key fnd_objects.obj_name. ' ||
14007             'x_return_status = ' || x_return_status,
14008                                   p_msg_level=>fnd_log.level_statement);
14009       END IF;
14010 
14011     END IF;
14012   END IF;
14013 
14014     -----------------------
14015     -- validate object_type
14016     -----------------------
14017 /****Logical APIs - validation not required****/
14018   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
14019     -- object_type is mandatory
14020     validate_mandatory (
14021       p_create_update_flag      => p_create_update_flag,
14022       p_column                  => 'object_type',
14023       p_column_value            => p_relationship_rec.object_type,
14024       x_return_status           => x_return_status
14025     );
14026 
14027     /*IF g_debug THEN
14028       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_type is mandatory. ' ||
14029                                'x_return_status = ' || x_return_status,
14030                              l_debug_prefix);
14031     END IF;
14032     */
14033     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14034            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_type is mandatory. ' ||
14035                                'x_return_status = ' || x_return_status,
14036                                   p_msg_level=>fnd_log.level_statement);
14037     END IF;
14038 
14039     -- object_type is non-updateable
14040     IF p_create_update_flag = 'U' THEN
14041       validate_nonupdateable (
14042         p_column                => 'object_type',
14043         p_column_value          => p_relationship_rec.object_type,
14044         p_old_column_value      => l_object_type,
14045         x_return_status         => x_return_status
14046       );
14047 
14048       /*IF g_debug THEN
14049         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'object_type is non-updateable. ' ||
14050                                  'x_return_status = ' || x_return_status,
14051                                l_debug_prefix);
14052       END IF;
14053       */
14054       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14055            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'object_type is non-updateable. ' ||
14056                                  'x_return_status = ' || x_return_status,
14057                                   p_msg_level=>fnd_log.level_statement);
14058       END IF;
14059 
14060     END IF;
14061 
14062     -- object_type has foreign key fnd_object_instance_sets.instance_set_name
14063     -- do not need to check during update because object_type is
14064     -- non-updateable.
14065     IF p_create_update_flag = 'C'
14066        AND p_relationship_rec.object_type IS NOT NULL
14067        AND p_relationship_rec.object_type <> fnd_api.g_miss_char
14068     THEN
14069       BEGIN
14070         SELECT 'Y'
14071         INTO   l_dummy
14072         FROM   fnd_object_instance_sets fois
14073         WHERE  fois.instance_set_name = p_relationship_rec.object_type;
14074       EXCEPTION
14075         WHEN NO_DATA_FOUND THEN
14076           fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
14077           fnd_message.set_token('FK', 'object_type');
14078           fnd_message.set_token('COLUMN', 'instance_set_name');
14079           fnd_message.set_token('TABLE', 'fnd_object_instance_sets');
14080           fnd_msg_pub.add;
14081           x_return_status := fnd_api.g_ret_sts_error;
14082       END;
14083 
14084       /*IF g_debug THEN
14085         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14086           'object_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
14087             'x_return_status = ' || x_return_status,
14088           l_debug_prefix
14089         );
14090       END IF;
14091       */
14092       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14093            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14094            p_message=>'object_type has foreign key fnd_object_instance_sets.instance_set_name. ' ||
14095             'x_return_status = ' || x_return_status,
14096                                   p_msg_level=>fnd_log.level_statement);
14097       END IF;
14098 
14099     END IF;
14100   END IF;
14101 
14102     ----------------------
14103     -- validate start_date
14104     ----------------------
14105 /* The start_date is defaulted in table handler for bug # 2260303
14106    Hence removed the mandatory check for start_date
14107 
14108     -- start_date is mandatory
14109     validate_mandatory (
14110       p_create_update_flag      => p_create_update_flag,
14111       p_column                  => 'start_date',
14112       p_column_value            => p_relationship_rec.start_date,
14113       x_return_status           => x_return_status
14114     );
14115 
14116     IF g_debug THEN
14117       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'start_date is mandatory. ' ||
14118                                'x_return_status = ' || x_return_status,
14119                              l_debug_prefix);
14120     END IF;
14121 */
14122     -- start_date cannot be set to null during update
14123 
14124     IF p_create_update_flag = 'U' THEN
14125       validate_cannot_update_to_null (
14126         p_column              => 'start_date',
14127         p_column_value        => p_relationship_rec.start_date,
14128         x_return_status       => x_return_status
14129       );
14130 
14131       /*IF g_debug THEN
14132         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14133           'start_date cannot be set to null during update. ' ||
14134             'x_return_status = ' || x_return_status,
14135           l_debug_prefix
14136         );
14137       END IF;
14138       */
14139       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14140            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14141            p_message=>'start_date cannot be set to null during update. ' ||
14142             'x_return_status = ' || x_return_status,
14143                                   p_msg_level=>fnd_log.level_statement);
14144       END IF;
14145 
14146     END IF;
14147 
14148     --------------------
14149     -- validate party_id
14150     --------------------
14151 
14152     -- party_id is non-updateable
14153     IF p_create_update_flag = 'U' THEN
14154       validate_nonupdateable (
14155         p_column                => 'party_id',
14156         p_column_value          => p_relationship_rec.party_rec.party_id,
14157         p_old_column_value      => l_party_id,
14158         x_return_status         => x_return_status);
14159 
14160       /*IF g_debug THEN
14161         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,'party_id is non-updateable. ' ||
14162                                  'x_return_status = ' || x_return_status,
14163                                l_debug_prefix);
14164       END IF;
14165       */
14166       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14167            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable. ' ||
14168                                  'x_return_status = ' || x_return_status,
14169                                   p_msg_level=>fnd_log.level_statement);
14170      END IF;
14171 
14172     END IF;
14173 
14174     ------------------
14175     -- validate status
14176     ------------------
14177 
14178     -- status cannot be set to null during update
14179     IF p_create_update_flag = 'U' THEN
14180       validate_cannot_update_to_null (
14181         p_column                                => 'status',
14182         p_column_value                          => p_relationship_rec.status,
14183         x_return_status                         => x_return_status
14184       );
14185 
14186       /*IF g_debug THEN
14187         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14188           'status cannot be set to null during update. ' ||
14189             'x_return_status = ' || x_return_status,
14190           l_debug_prefix);
14191       END IF;
14192       */
14193       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14194            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'status cannot be set to null during update. ' ||
14195             'x_return_status = ' || x_return_status,
14196                                   p_msg_level=>fnd_log.level_statement);
14197     END IF;
14198 
14199     END IF;
14200 
14201 /****Logical APIs - validation not required****/
14202   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
14203     -- status is lookup code in lookup type REGISTRY_STATUS
14204     IF p_relationship_rec.status IS NOT NULL
14205        AND p_relationship_rec.status <> fnd_api.g_miss_char
14206        AND (p_create_update_flag = 'C'
14207             OR (p_create_update_flag = 'U'
14208                 AND p_relationship_rec.status <> NVL(l_status,
14209                                                      fnd_api.g_miss_char)))
14210     THEN
14211       validate_lookup (
14212         p_column                                => 'status',
14213         p_lookup_type                           => 'REGISTRY_STATUS',
14214         p_column_value                          => p_relationship_rec.status,
14215         x_return_status                         => x_return_status
14216       );
14217 
14218       /*IF g_debug THEN
14219         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14220           'status is lookup code in lookup type REGISTRY_STATUS. ' ||
14221             'x_return_status = ' || x_return_status,
14222         l_debug_prefix);
14223       END IF;
14224       */
14225       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14226            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14227            p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
14228             'x_return_status = ' || x_return_status,
14229                                   p_msg_level=>fnd_log.level_statement);
14230     END IF;
14231 
14232     END IF;
14233   END IF;
14234 
14235     /* Bug 2197181: removed content_source_type validation as this
14236        column has been obsoleted  for mix-n-match project.
14237 
14238     ----------------------------------------------
14239     -- validate content_source_type
14240     ----------------------------------------------
14241 
14242     -- do not need to chack content_source_type is mandatory because
14243     -- we default content_source_type to
14244     -- hz_party_v2pub.g_miss_content_source_type in the table handler.
14245 
14246     -- content_source_type is non-updateable
14247     IF p_create_update_flag = 'U' THEN
14248       validate_nonupdateable (
14249         p_column                => 'content_source_type',
14250         p_column_value          => p_relationship_rec.content_source_type,
14251         p_old_column_value      => l_content_source_type,
14252         x_return_status         => x_return_status
14253       );
14254 
14255 
14256       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14257            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'content_source_type is non-updateable. ' ||
14258                                  'x_return_status = ' || x_return_status,
14259                                   p_msg_level=>fnd_log.level_statement);
14260     END IF;
14261 
14262     END IF;
14263 
14264     -- content_source_type is lookup code in lookup type CONTENT_SOURCE_TYPE
14265     validate_lookup (
14266       p_column                  => 'content_source_type',
14267       p_lookup_type             => 'CONTENT_SOURCE_TYPE',
14268       p_column_value            => p_relationship_rec.content_source_type,
14269       x_return_status           => x_return_status
14270     );
14271 
14272     IF g_debug THEN
14273       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14274         'content_source_type is lookup code in lookup type CONTENT_SOURCE_TYPE. ' ||
14275           'x_return_status = ' || x_return_status,
14276         l_debug_prefix
14277       );
14278     END IF;
14279     */
14280 
14281     -- Bug 2197181: Added validation for mix-n-match
14282 
14283     ----------------------------------------
14284     -- validate content_source_type and actual_content_source_type
14285     ----------------------------------------
14286 
14287     HZ_MIXNM_UTILITY.ValidateContentSource (
14288       p_api_version                       => 'V2',
14289       p_create_update_flag                => p_create_update_flag,
14290       p_check_update_privilege            => 'N',
14291       p_content_source_type               => p_relationship_rec.content_source_type,
14292       p_old_content_source_type           => l_content_source_type,
14293       p_actual_content_source             => p_relationship_rec.actual_content_source,
14294       p_old_actual_content_source         => db_actual_content_source,
14295       p_entity_name                       => 'HZ_RELATIONSHIPS',
14296       x_return_status                     => x_return_status );
14297 
14298     ----------------------------------
14299     -- start_date, end_date validation
14300     ----------------------------------
14301 
14302     -- end_date must be null or greater than start date
14303     IF (p_create_update_flag = 'C') THEN
14304       IF p_relationship_rec.end_date IS NOT NULL AND
14305          p_relationship_rec.end_date <> fnd_api.g_miss_date AND
14306          p_relationship_rec.end_date < p_relationship_rec.start_date
14307       THEN
14308         fnd_message.set_name('AR', 'HZ_API_START_DATE_GREATER');
14309         fnd_msg_pub.add;
14310         x_return_status := fnd_api.g_ret_sts_error;
14311       END IF;
14312     ELSIF (p_create_update_flag = 'U') THEN
14313       -- old start_date, end_date has been selected from table
14314       -- and put into l_start_date, l_end_date
14315 
14316       IF p_relationship_rec.start_date <> fnd_api.g_miss_date THEN
14317         l_start_date := p_relationship_rec.start_date;
14318       END IF;
14319 
14320       IF p_relationship_rec.end_date IS NULL
14321          OR p_relationship_rec.end_date <> fnd_api.g_miss_date
14322       THEN
14323         l_end_date := p_relationship_rec.end_date;
14324       END IF;
14325 
14326       IF l_end_date IS NOT NULL
14327          AND l_end_date < l_start_date
14328       THEN
14329         fnd_message.set_name('AR', 'HZ_API_START_DATE_GREATER');
14330         fnd_msg_pub.add;
14331         x_return_status := fnd_api.g_ret_sts_error;
14332       END IF;
14333     END IF;
14334 
14335     /*IF g_debug THEN
14336       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14337         'end_date must be null or greater than start date. ' ||
14338           'x_return_status = ' || x_return_status,
14339         l_debug_prefix);
14340     END IF;
14341     */
14342     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14343            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'end_date must be null or greater than start date. ' ||
14344           'x_return_status = ' || x_return_status,
14345                                   p_msg_level=>fnd_log.level_statement);
14346     END IF;
14347 
14348     ------------------------
14349     -- validate date overlap
14350     ------------------------
14351 
14352     IF p_create_update_flag = 'C' THEN
14353       db_actual_content_source := p_relationship_rec.actual_content_source;
14354     END IF;
14355 
14356     -- there should not be any date overlap between two identical relationships
14357 
14358 -- Bug 3294936 : check for all records in the cursor for overlap
14359 
14360 --    OPEN c1(db_actual_content_source);
14361 
14362     For r1 in c1(db_actual_content_source)
14363     LOOP
14364 --    FETCH c1 into r1;
14365 --    IF c1%FOUND THEN
14366       l_overlap := hz_common_pub.is_time_overlap(
14367                      NVL(p_relationship_rec.start_date,sysdate),
14368                      p_relationship_rec.end_date,
14369                      r1.start_date,
14370                      r1.end_date
14371                    );
14372       IF l_overlap = 'Y' THEN
14373         fnd_message.set_name('AR', 'HZ_RELATIONSHIP_DATE_OVERLAP');
14374         fnd_msg_pub.add;
14375         x_return_status := fnd_api.g_ret_sts_error;
14376 -- Bug 3294936 : Add exit to come out of loop
14377         EXIT;
14378       END IF;
14379     END LOOP;
14380 --    END IF;
14381 --    CLOSE c1;
14382 
14383     /*IF g_debug THEN
14384       hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14385         'there should not be any date overlap between two identical relationships. ' ||
14386         'x_return_status = ' || x_return_status, l_debug_prefix);
14387     END IF;
14388     */
14389     IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
14390            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
14391            p_message=>'there should not be any date overlap between two identical relationships. ' ||
14392         'x_return_status = ' || x_return_status,
14393                                   p_msg_level=>fnd_log.level_statement);
14394     END IF;
14395 
14396     --------------------------------------
14397     -- validate created_by_module
14398     --------------------------------------
14399 
14400     validate_created_by_module(
14401       p_create_update_flag     => p_create_update_flag,
14402       p_created_by_module      => p_relationship_rec.created_by_module,
14403       p_old_created_by_module  => l_created_by_module,
14404       x_return_status          => x_return_status);
14405 
14406     --------------------------------------
14407     -- validate application_id
14408     --------------------------------------
14409 
14410     validate_application_id(
14411       p_create_update_flag     => p_create_update_flag,
14412       p_application_id         => p_relationship_rec.application_id,
14413       p_old_application_id     => l_application_id,
14414       x_return_status          => x_return_status);
14415 
14416     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14417         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_relationship (-)',
14418                                p_msg_level=>fnd_log.level_procedure);
14419     END IF;
14420 
14421   END validate_relationship;
14422 
14423   --
14424   -- DESCRIPTION
14425   --     Validates a contact point record (minus EFTs).  Kept for backward
14426   --     compatibility.
14427   --
14428   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14429   --
14430   -- ARGUMENTS
14431   --   IN:
14432   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14433   --     p_contact_point_rec  Contact point record.
14434   --     p_edi_rec            EDI record.
14435   --     p_email_rec          Email record.
14436   --     p_phone_rec          Phone record.
14437   --     p_telex_rec          Telex record.
14438   --     p_web_rec            Web record.
14439   --     p_rowid              Rowid of the record (used only in update mode).
14440   --   IN/OUT:
14441   --     x_return_status      Return status after the call. The status can
14442   --                          be FND_API.G_RET_STS_SUCCESS (success),
14443   --                          fnd_api.g_ret_sts_error (error),
14444   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14445   --
14446   -- NOTES
14447   --
14448   -- MODIFICATION HISTORY
14449   --
14450   --   07-23-2001    Jianying Huang      o Created.
14451   --   20-NOV-2001   Joe del Callar      Bug 2116225: Modified to accept EFT
14452   --                                     records for bank consolidation.
14453   --                                     Bug 2117973: Modified to comply with
14454   --                                     PL/SQL coding standards.
14455   --   05-DEC-2001   Joe del Callar      Bug 2136283: Modified to use generic
14456   --                                     validation procedure for improved
14457   --                                     backward compatibility.
14458   --
14459   PROCEDURE validate_contact_point (
14460     p_create_update_flag  IN     VARCHAR2,
14461     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14462     p_edi_rec             IN     hz_contact_point_v2pub.edi_rec_type := hz_contact_point_v2pub.g_miss_edi_rec,
14463     p_email_rec           IN     hz_contact_point_v2pub.email_rec_type := hz_contact_point_v2pub.g_miss_email_rec,
14464     p_phone_rec           IN     hz_contact_point_v2pub.phone_rec_type := hz_contact_point_v2pub.g_miss_phone_rec,
14465     p_telex_rec           IN     hz_contact_point_v2pub.telex_rec_type := hz_contact_point_v2pub.g_miss_telex_rec,
14466     p_web_rec             IN     hz_contact_point_v2pub.web_rec_type := hz_contact_point_v2pub.g_miss_web_rec,
14467     p_rowid               IN     ROWID,
14468     x_return_status       IN OUT NOCOPY VARCHAR2
14469   ) IS
14470   l_debug_prefix                       VARCHAR2(30) := '';
14471   BEGIN
14472     -- Check if API is called in debug mode. If yes, enable debug.
14473     --enable_debug;
14474 
14475     -- Debug info.
14476     /*IF g_debug THEN
14477       hz_utility_v2pub.debug ('validate_contact_point (+)');
14478     END IF;
14479     */
14480     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14481         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_contact_point (+)',
14482                                p_msg_level=>fnd_log.level_procedure);
14483     END IF;
14484 
14485 
14486     validate_contact_point_main(
14487       p_create_update_flag => p_create_update_flag,
14488       p_contact_point_rec  => p_contact_point_rec,
14489       p_edi_rec            => p_edi_rec,
14490       p_email_rec          => p_email_rec,
14491       p_phone_rec          => p_phone_rec,
14492       p_telex_rec          => p_telex_rec,
14493       p_web_rec            => p_web_rec,
14494       p_rowid              => p_rowid,
14495       x_return_status      => x_return_status
14496     );
14497 
14498     -- Debug info.
14499     /*IF g_debug THEN
14500       hz_utility_v2pub.debug ('validate_contact_point (-)');
14501     END IF;
14502     */
14503     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14504         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_contact_point (-)',
14505                                p_msg_level=>fnd_log.level_procedure);
14506     END IF;
14507 
14508 
14509     -- Check if API is called in debug mode. If yes, disable debug.
14510     --disable_debug;
14511   END validate_contact_point;
14512 
14513   --
14514   -- DESCRIPTION
14515   --     Validates an EDI contact point record.
14516   --
14517   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14518   --
14519   -- ARGUMENTS
14520   --   IN:
14521   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14522   --     p_contact_point_rec  Contact point record.
14523   --     p_edi_rec            EDI record.
14524   --     p_rowid              Rowid of the record (used only in update mode).
14525   --   IN/OUT:
14526   --     x_return_status      Return status after the call. The status can
14527   --                          be FND_API.G_RET_STS_SUCCESS (success),
14528   --                          fnd_api.g_ret_sts_error (error),
14529   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14530   --
14531   -- NOTES
14532   --
14533   -- MODIFICATION HISTORY
14534   --   05-DEC-2001   Joe del Callar      Bug 2136283: Created to improve
14535   --                                     backward compatibility.
14536   --
14537   PROCEDURE validate_edi_contact_point (
14538     p_create_update_flag  IN     VARCHAR2,
14539     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14540     p_edi_rec             IN     hz_contact_point_v2pub.edi_rec_type := hz_contact_point_v2pub.g_miss_edi_rec,
14541     p_rowid               IN     ROWID,
14542     x_return_status       IN OUT NOCOPY VARCHAR2
14543   ) IS
14544   l_debug_prefix                       VARCHAR2(30) := '';
14545   BEGIN
14546     -- Check if API is called in debug mode. If yes, enable debug.
14547     --enable_debug;
14548 
14549     -- Debug info.
14550     /*IF g_debug THEN
14551       hz_utility_v2pub.debug ('validate_edi_contact_point (+)');
14552     END IF;
14553     */
14554     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14555         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_edi_contact_point (+)',
14556                                p_msg_level=>fnd_log.level_procedure);
14557     END IF;
14558 
14559 
14560     validate_contact_point_main(
14561       p_create_update_flag => p_create_update_flag,
14562       p_contact_point_rec  => p_contact_point_rec,
14563       p_edi_rec            => p_edi_rec,
14564       p_rowid              => p_rowid,
14565       x_return_status      => x_return_status
14566     );
14567 
14568     -- Debug info.
14569     /*IF g_debug THEN
14570       hz_utility_v2pub.debug ('validate_edi_contact_point (-)');
14571     END IF;
14572     */
14573     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14574         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_edi_contact_point (-)',
14575                                p_msg_level=>fnd_log.level_procedure);
14576     END IF;
14577 
14578 
14579     -- Check if API is called in debug mode. If yes, disable debug.
14580     --disable_debug;
14581   END validate_edi_contact_point;
14582 
14583   --
14584   -- DESCRIPTION
14585   --     Validates an EFT contact point record.
14586   --
14587   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14588   --
14589   -- ARGUMENTS
14590   --   IN:
14591   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14592   --     p_contact_point_rec  Contact point record.
14593   --     p_eft_rec            EFT record.
14594   --     p_rowid              Rowid of the record (used only in update mode).
14595   --   IN/OUT:
14596   --     x_return_status      Return status after the call. The status can
14597   --                          be FND_API.G_RET_STS_SUCCESS (success),
14598   --                          fnd_api.g_ret_sts_error (error),
14599   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14600   --
14601   -- NOTES
14602   --
14603   -- MODIFICATION HISTORY
14604   --   05-DEC-2001   Joe del Callar      Bug 2136283: Created to improve
14605   --                                     backward compatibility.
14606   --
14607   PROCEDURE validate_eft_contact_point (
14608     p_create_update_flag  IN     VARCHAR2,
14609     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14610     p_eft_rec             IN     hz_contact_point_v2pub.eft_rec_type := hz_contact_point_v2pub.g_miss_eft_rec,
14611     p_rowid               IN     ROWID,
14612     x_return_status       IN OUT NOCOPY VARCHAR2
14613   ) IS
14614   l_debug_prefix                       VARCHAR2(30) := '';
14615   BEGIN
14616     -- Check if API is called in debug mode. If yes, enable debug.
14617     --enable_debug;
14618 
14619     -- Debug info.
14620     /*IF g_debug THEN
14621       hz_utility_v2pub.debug ('validate_eft_contact_point (+)');
14622     END IF;
14623     */
14624     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14625         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_eft_contact_point (+)',
14626                                p_msg_level=>fnd_log.level_procedure);
14627     END IF;
14628 
14629 
14630     validate_contact_point_main(
14631       p_create_update_flag => p_create_update_flag,
14632       p_contact_point_rec  => p_contact_point_rec,
14633       p_eft_rec            => p_eft_rec,
14634       p_rowid              => p_rowid,
14635       x_return_status      => x_return_status
14636     );
14637 
14638     -- Debug info.
14639     /*IF g_debug THEN
14640       hz_utility_v2pub.debug ('validate_eft_contact_point (-)');
14641     END IF;
14642     */
14643     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14644         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_eft_contact_point (-)',
14645                                p_msg_level=>fnd_log.level_procedure);
14646     END IF;
14647 
14648 
14649     -- Check if API is called in debug mode. If yes, disable debug.
14650     --disable_debug;
14651   END validate_eft_contact_point;
14652 
14653   --
14654   -- DESCRIPTION
14655   --     Validates an Web contact point record.
14656   --
14657   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14658   --
14659   -- ARGUMENTS
14660   --   IN:
14661   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14662   --     p_contact_point_rec  Contact point record.
14663   --     p_web_rec            Web record.
14664   --     p_rowid              Rowid of the record (used only in update mode).
14665   --   IN/OUT:
14666   --     x_return_status      Return status after the call. The status can
14667   --                          be FND_API.G_RET_STS_SUCCESS (success),
14668   --                          fnd_api.g_ret_sts_error (error),
14669   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14670   --
14671   -- NOTES
14672   --
14673   -- MODIFICATION HISTORY
14674   --   05-DEC-2001   Joe del Callar      Bug 2136283: Created to improve
14675   --                                     backward compatibility.
14676   --
14677   PROCEDURE validate_web_contact_point (
14678     p_create_update_flag  IN     VARCHAR2,
14679     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14680     p_web_rec             IN     hz_contact_point_v2pub.web_rec_type := hz_contact_point_v2pub.g_miss_web_rec,
14681     p_rowid               IN     ROWID,
14682     x_return_status       IN OUT NOCOPY VARCHAR2
14683   ) IS
14684   l_debug_prefix                       VARCHAR2(30) := '';
14685   BEGIN
14686     -- Check if API is called in debug mode. If yes, enable debug.
14687     --enable_debug;
14688 
14689     -- Debug info.
14690     /*IF g_debug THEN
14691       hz_utility_v2pub.debug ('validate_web_contact_point (+)');
14692     END IF;
14693     */
14694     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14695         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_web_contact_point (+)',
14696                                p_msg_level=>fnd_log.level_procedure);
14697     END IF;
14698 
14699 
14700     validate_contact_point_main(
14701       p_create_update_flag => p_create_update_flag,
14702       p_contact_point_rec  => p_contact_point_rec,
14703       p_web_rec            => p_web_rec,
14704       p_rowid              => p_rowid,
14705       x_return_status      => x_return_status
14706     );
14707 
14708     -- Debug info.
14709     /*IF g_debug THEN
14710       hz_utility_v2pub.debug ('validate_web_contact_point (-)');
14711     END IF;
14712     */
14713 
14714 
14715     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14716         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_web_contact_point (-)',
14717                                p_msg_level=>fnd_log.level_procedure);
14718     END IF;
14719 
14720     -- Check if API is called in debug mode. If yes, disable debug.
14721     --disable_debug;
14722   END validate_web_contact_point;
14723 
14724   --
14725   -- DESCRIPTION
14726   --     Validates an Phone contact point record.
14727   --
14728   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14729   --
14730   -- ARGUMENTS
14731   --   IN:
14732   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14733   --     p_contact_point_rec  Contact point record.
14734   --     p_phone_rec          Phone record.
14735   --     p_rowid              Rowid of the record (used only in update mode).
14736   --   IN/OUT:
14737   --     x_return_status      Return status after the call. The status can
14738   --                          be FND_API.G_RET_STS_SUCCESS (success),
14739   --                          fnd_api.g_ret_sts_error (error),
14740   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14741   --
14742   -- NOTES
14743   --
14744   -- MODIFICATION HISTORY
14745   --   05-DEC-2001   Joe del Callar      Bug 2136283: Created to improve
14746   --                                     backward compatibility.
14747   --
14748   PROCEDURE validate_phone_contact_point (
14749     p_create_update_flag  IN     VARCHAR2,
14750     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14751     p_phone_rec           IN     hz_contact_point_v2pub.phone_rec_type := hz_contact_point_v2pub.g_miss_phone_rec,
14752     p_rowid               IN     ROWID,
14753     x_return_status       IN OUT NOCOPY VARCHAR2
14754   ) IS
14755   l_debug_prefix                       VARCHAR2(30) := '';
14756   BEGIN
14757     -- Check if API is called in debug mode. If yes, enable debug.
14758     --enable_debug;
14759 
14760     -- Debug info.
14761 
14762     /*IF g_debug THEN
14763       hz_utility_v2pub.debug ('validate_phone_contact_point (+)');
14764     END IF;
14765     */
14766     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14767         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_phone_contact_point (+)',
14768                                p_msg_level=>fnd_log.level_procedure);
14769     END IF;
14770 
14771 
14772     validate_contact_point_main(
14773       p_create_update_flag => p_create_update_flag,
14774       p_contact_point_rec  => p_contact_point_rec,
14775       p_phone_rec          => p_phone_rec,
14776       p_rowid              => p_rowid,
14777       x_return_status      => x_return_status
14778     );
14779 
14780     -- Debug info.
14781     /*IF g_debug THEN
14782       hz_utility_v2pub.debug ('validate_phone_contact_point (-)');
14783     END IF;
14784     */
14785     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14786         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_phone_contact_point (-)',
14787                                p_msg_level=>fnd_log.level_procedure);
14788     END IF;
14789 
14790     -- Check if API is called in debug mode. If yes, disable debug.
14791     --disable_debug;
14792   END validate_phone_contact_point;
14793 
14794   --
14795   -- DESCRIPTION
14796   --     Validates an Telex contact point record.
14797   --
14798   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14799   --
14800   -- ARGUMENTS
14801   --   IN:
14802   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14803   --     p_contact_point_rec  Contact point record.
14804   --     p_telex_rec          Telex record.
14805   --     p_rowid              Rowid of the record (used only in update mode).
14806   --   IN/OUT:
14807   --     x_return_status      Return status after the call. The status can
14808   --                          be FND_API.G_RET_STS_SUCCESS (success),
14809   --                          fnd_api.g_ret_sts_error (error),
14810   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14811   --
14812   -- NOTES
14813   --
14814   -- MODIFICATION HISTORY
14815   --   05-DEC-2001   Joe del Callar      Bug 2136283: Created to improve
14816   --                                     backward compatibility.
14817   --
14818   PROCEDURE validate_telex_contact_point (
14819     p_create_update_flag  IN     VARCHAR2,
14820     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14821     p_telex_rec           IN     hz_contact_point_v2pub.telex_rec_type := hz_contact_point_v2pub.g_miss_telex_rec,
14822     p_rowid               IN     ROWID,
14823     x_return_status       IN OUT NOCOPY VARCHAR2
14824   ) IS
14825   l_debug_prefix                       VARCHAR2(30) := '';
14826   BEGIN
14827     -- Check if API is called in debug mode. If yes, enable debug.
14828     --enable_debug;
14829 
14830     -- Debug info.
14831     /*IF g_debug THEN
14832       hz_utility_v2pub.debug ('validate_telex_contact_point (+)');
14833     END IF;
14834     */
14835     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14836         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_telex_contact_point (+)',
14837                                p_msg_level=>fnd_log.level_procedure);
14838     END IF;
14839 
14840 
14841     validate_contact_point_main(
14842       p_create_update_flag => p_create_update_flag,
14843       p_contact_point_rec  => p_contact_point_rec,
14844       p_telex_rec          => p_telex_rec,
14845       p_rowid              => p_rowid,
14846       x_return_status      => x_return_status
14847     );
14848 
14849     -- Debug info.
14850     /*IF g_debug THEN
14851       hz_utility_v2pub.debug ('validate_telex_contact_point (-)');
14852     END IF;
14853     */
14854     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14855         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_telex_contact_point (-)',
14856                                p_msg_level=>fnd_log.level_procedure);
14857     END IF;
14858 
14859 
14860     -- Check if API is called in debug mode. If yes, disable debug.
14861     --disable_debug;
14862   END validate_telex_contact_point;
14863 
14864   --
14865   -- DESCRIPTION
14866   --     Validates an Email contact point record.
14867   --
14868   -- EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
14869   --
14870   -- ARGUMENTS
14871   --   IN:
14872   --     p_create_update_flag Create update flag. 'C' = create. 'U' = update.
14873   --     p_contact_point_rec  Contact point record.
14874   --     p_email_rec          Email record.
14875   --     p_rowid              Rowid of the record (used only in update mode).
14876   --   IN/OUT:
14877   --     x_return_status      Return status after the call. The status can
14878   --                          be FND_API.G_RET_STS_SUCCESS (success),
14879   --                          fnd_api.g_ret_sts_error (error),
14880   --                          FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
14881   --
14882   -- NOTES
14883   --
14884   -- MODIFICATION HISTORY
14885   --   05-DEC-2001   Joe del Callar      Bug 2136283: Created to improve
14886   --                                     backward compatibility.
14887   --
14888   PROCEDURE validate_email_contact_point (
14889     p_create_update_flag  IN     VARCHAR2,
14890     p_contact_point_rec   IN     hz_contact_point_v2pub.contact_point_rec_type,
14891     p_email_rec           IN     hz_contact_point_v2pub.email_rec_type := hz_contact_point_v2pub.g_miss_email_rec,
14892     p_rowid               IN     ROWID,
14893     x_return_status       IN OUT NOCOPY VARCHAR2
14894   ) IS
14895   l_debug_prefix                       VARCHAR2(30) := '';
14896   BEGIN
14897     -- Check if API is called in debug mode. If yes, enable debug.
14898     --enable_debug;
14899 
14900     -- Debug info.
14901     /*IF g_debug THEN
14902       hz_utility_v2pub.debug ('validate_email_contact_point (+)');
14903     END IF;
14904     */
14905     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14906         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_email_contact_point (+)',
14907                                p_msg_level=>fnd_log.level_procedure);
14908     END IF;
14909 
14910 
14911     validate_contact_point_main(
14912       p_create_update_flag => p_create_update_flag,
14913       p_contact_point_rec  => p_contact_point_rec,
14914       p_email_rec          => p_email_rec,
14915       p_rowid              => p_rowid,
14916       x_return_status      => x_return_status
14917     );
14918 
14919     -- Debug info.
14920     /*IF g_debug THEN
14921       hz_utility_v2pub.debug ('validate_email_contact_point (-)');
14922     END IF;
14923     */
14924     IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14925         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_email_contact_point (-)',
14926                                p_msg_level=>fnd_log.level_procedure);
14927     END IF;
14928 
14929 
14930     -- Check if API is called in debug mode. If yes, disable debug.
14931     --disable_debug;
14932   END validate_email_contact_point;
14933 
14934   PROCEDURE  validate_org_nonsupport_column (
14935     p_create_update_flag                    IN     VARCHAR2,
14936     p_organization_rec                      IN     HZ_PARTY_V2PUB.ORGANIZATION_REC_TYPE,
14937     x_return_status                         IN OUT NOCOPY VARCHAR2
14938   ) IS
14939   l_debug_prefix                       VARCHAR2(30) := '';
14940   BEGIN
14941         -- Debug info.
14942        /* IF G_DEBUG THEN
14943             HZ_UTILITY_V2PUB.debug ( 'validate_org_nonsupport_column (+)' );
14944         END IF;
14945         */
14946         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
14947              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_org_nonsupport_column (+)',
14948                                p_msg_level=>fnd_log.level_procedure);
14949         END IF;
14950 
14951 
14952         IF ( p_create_update_flag = 'C' AND
14953                  p_organization_rec.avg_high_credit IS NOT NULL AND
14954                  p_organization_rec.avg_high_credit <> FND_API.G_MISS_NUM )
14955          OR
14956                ( p_create_update_flag = 'U' AND
14957                  ( p_organization_rec.avg_high_credit = FND_API.G_MISS_NUM OR
14958                    p_organization_rec.avg_high_credit IS NOT NULL
14959          ) )
14960             THEN
14961                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
14962                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'avg_high_credit' );
14963                 FND_MSG_PUB.ADD;
14964                 x_return_status := FND_API.G_RET_STS_ERROR;
14965             END IF;
14966 
14967             IF ( p_create_update_flag = 'C' AND
14968                  p_organization_rec.credit_score IS NOT NULL AND
14969                  p_organization_rec.credit_score <> FND_API.G_MISS_CHAR )
14970          OR
14971                ( p_create_update_flag = 'U' AND
14972                  ( p_organization_rec.credit_score = FND_API.G_MISS_CHAR OR
14973                    p_organization_rec.credit_score IS NOT NULL
14974          ) )
14975             THEN
14976                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
14977                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score' );
14978                 FND_MSG_PUB.ADD;
14979                 x_return_status := FND_API.G_RET_STS_ERROR;
14980             END IF;
14981 
14982             IF ( p_create_update_flag = 'C' AND
14983                  p_organization_rec.credit_score_age IS NOT NULL AND
14984                  p_organization_rec.credit_score_age <> FND_API.G_MISS_NUM )
14985          OR
14986                ( p_create_update_flag = 'U' AND
14987                  ( p_organization_rec.credit_score_age = FND_API.G_MISS_NUM  OR
14988                    p_organization_rec.credit_score_age IS NOT  NULL
14989          ) )
14990             THEN
14991                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
14992                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_age' );
14993                 FND_MSG_PUB.ADD;
14994                 x_return_status := FND_API.G_RET_STS_ERROR;
14995             END IF;
14996 
14997             IF ( p_create_update_flag = 'C' AND
14998                  p_organization_rec.credit_score_class IS NOT NULL AND
14999                  p_organization_rec.credit_score_class <> FND_API.G_MISS_NUM )
15000          OR
15001                ( p_create_update_flag = 'U' AND
15002                  ( p_organization_rec.credit_score_class = FND_API.G_MISS_NUM  OR
15003                    p_organization_rec.credit_score_class IS NOT NULL
15004          ) )
15005             THEN
15006                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15007                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_class' );
15008                 FND_MSG_PUB.ADD;
15009                 x_return_status := FND_API.G_RET_STS_ERROR;
15010             END IF;
15011 
15012             IF ( p_create_update_flag = 'C' AND
15013                  p_organization_rec.credit_score_commentary IS NOT NULL AND
15014                  p_organization_rec.credit_score_commentary <> FND_API.G_MISS_CHAR )
15015          OR
15016                ( p_create_update_flag = 'U' AND
15017                  ( p_organization_rec.credit_score_commentary = FND_API.G_MISS_CHAR OR
15018                    p_organization_rec.credit_score_commentary IS NOT NULL
15019          ) )
15020             THEN
15021                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15022                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary' );
15023                 FND_MSG_PUB.ADD;
15024                 x_return_status := FND_API.G_RET_STS_ERROR;
15025             END IF;
15026 
15027             IF ( p_create_update_flag = 'C' AND
15028                  p_organization_rec.credit_score_commentary2 IS NOT NULL AND
15029                  p_organization_rec.credit_score_commentary2 <> FND_API.G_MISS_CHAR )
15030          OR
15031                ( p_create_update_flag = 'U' AND
15032                  ( p_organization_rec.credit_score_commentary2 = FND_API.G_MISS_CHAR OR
15033                    p_organization_rec.credit_score_commentary2 IS NOT NULL
15034          ) )
15035             THEN
15036                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15037                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary2' );
15038                 FND_MSG_PUB.ADD;
15039                 x_return_status := FND_API.G_RET_STS_ERROR;
15040             END IF;
15041 
15042             IF ( p_create_update_flag = 'C' AND
15043                  p_organization_rec.credit_score_commentary3 IS NOT NULL AND
15044                  p_organization_rec.credit_score_commentary3 <> FND_API.G_MISS_CHAR )
15045          OR
15046                ( p_create_update_flag = 'U' AND
15047                  ( p_organization_rec.credit_score_commentary3 = FND_API.G_MISS_CHAR OR
15048                    p_organization_rec.credit_score_commentary3 IS NOT NULL
15049          ) )
15050             THEN
15051                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15052                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary3' );
15053                 FND_MSG_PUB.ADD;
15054                 x_return_status := FND_API.G_RET_STS_ERROR;
15055             END IF;
15056 
15057             IF ( p_create_update_flag = 'C' AND
15058                  p_organization_rec.credit_score_commentary4 IS NOT NULL AND
15059                  p_organization_rec.credit_score_commentary4 <> FND_API.G_MISS_CHAR )
15060          OR
15061                ( p_create_update_flag = 'U' AND
15062                  ( p_organization_rec.credit_score_commentary4 = FND_API.G_MISS_CHAR OR
15063                    p_organization_rec.credit_score_commentary4 IS NOT NULL
15064          ) )
15065             THEN
15066                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15067                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary4' );
15068                 FND_MSG_PUB.ADD;
15069                 x_return_status := FND_API.G_RET_STS_ERROR;
15070             END IF;
15071 
15072             IF ( p_create_update_flag = 'C' AND
15073                  p_organization_rec.credit_score_commentary5 IS NOT NULL AND
15074                  p_organization_rec.credit_score_commentary5 <> FND_API.G_MISS_CHAR )
15075          OR
15076                ( p_create_update_flag = 'U' AND
15077                  ( p_organization_rec.credit_score_commentary5 = FND_API.G_MISS_CHAR OR
15078                    p_organization_rec.credit_score_commentary5 IS NOT NULL
15079          ) )
15080             THEN
15081                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15082                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary5' );
15083                 FND_MSG_PUB.ADD;
15084                 x_return_status := FND_API.G_RET_STS_ERROR;
15085             END IF;
15086 
15087             IF ( p_create_update_flag = 'C' AND
15088                  p_organization_rec.credit_score_commentary6 IS NOT NULL AND
15089                  p_organization_rec.credit_score_commentary6 <> FND_API.G_MISS_CHAR )
15090          OR
15091                ( p_create_update_flag = 'U' AND
15092                  ( p_organization_rec.credit_score_commentary6 = FND_API.G_MISS_CHAR OR
15093                    p_organization_rec.credit_score_commentary6 IS NOT NULL
15094          ) )
15095             THEN
15096                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15097                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary6' );
15098                 FND_MSG_PUB.ADD;
15099                 x_return_status := FND_API.G_RET_STS_ERROR;
15100             END IF;
15101 
15102             IF ( p_create_update_flag = 'C' AND
15103                  p_organization_rec.credit_score_commentary7 IS NOT NULL AND
15104                  p_organization_rec.credit_score_commentary7 <> FND_API.G_MISS_CHAR )
15105          OR
15106                ( p_create_update_flag = 'U' AND
15107                  ( p_organization_rec.credit_score_commentary7 = FND_API.G_MISS_CHAR OR
15108                    p_organization_rec.credit_score_commentary7 IS NOT NULL
15109          ) )
15110             THEN
15111                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15112                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary7' );
15113                 FND_MSG_PUB.ADD;
15114                 x_return_status := FND_API.G_RET_STS_ERROR;
15115             END IF;
15116 
15117             IF ( p_create_update_flag = 'C' AND
15118                  p_organization_rec.credit_score_commentary8 IS NOT NULL AND
15119                  p_organization_rec.credit_score_commentary8 <> FND_API.G_MISS_CHAR )
15120          OR
15121                ( p_create_update_flag = 'U' AND
15122                  ( p_organization_rec.credit_score_commentary8 = FND_API.G_MISS_CHAR OR
15123                    p_organization_rec.credit_score_commentary8 IS NOT NULL
15124          ) )
15125             THEN
15126                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15127                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary8' );
15128                 FND_MSG_PUB.ADD;
15129                 x_return_status := FND_API.G_RET_STS_ERROR;
15130             END IF;
15131 
15132             IF ( p_create_update_flag = 'C' AND
15133                  p_organization_rec.credit_score_commentary9 IS NOT NULL AND
15134                  p_organization_rec.credit_score_commentary9 <> FND_API.G_MISS_CHAR )
15135          OR
15136                ( p_create_update_flag = 'U' AND
15137                  ( p_organization_rec.credit_score_commentary9 = FND_API.G_MISS_CHAR OR
15138                    p_organization_rec.credit_score_commentary9 IS NOT NULL
15139          ) )
15140             THEN
15141                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15142                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary9' );
15143                 FND_MSG_PUB.ADD;
15144                 x_return_status := FND_API.G_RET_STS_ERROR;
15145             END IF;
15146 
15147             IF ( p_create_update_flag = 'C' AND
15148                  p_organization_rec.credit_score_commentary10 IS NOT NULL AND
15149                  p_organization_rec.credit_score_commentary10 <> FND_API.G_MISS_CHAR )
15150          OR
15151                ( p_create_update_flag = 'U' AND
15152                  ( p_organization_rec.credit_score_commentary10 = FND_API.G_MISS_CHAR OR
15153                    p_organization_rec.credit_score_commentary10 IS NOT NULL
15154          ) )
15155             THEN
15156                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15157                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_commentary10' );
15158                 FND_MSG_PUB.ADD;
15159                 x_return_status := FND_API.G_RET_STS_ERROR;
15160             END IF;
15161 
15162             IF ( p_create_update_flag = 'C' AND
15163                  p_organization_rec.credit_score_date IS NOT NULL AND
15164                  p_organization_rec.credit_score_date <> FND_API.G_MISS_DATE )
15165          OR
15166                ( p_create_update_flag = 'U' AND
15167                  ( p_organization_rec.credit_score_date = FND_API.G_MISS_DATE OR
15168                    p_organization_rec.credit_score_date IS NOT NULL
15169          ) )
15170             THEN
15171                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15172                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_date' );
15173                 FND_MSG_PUB.ADD;
15174                 x_return_status := FND_API.G_RET_STS_ERROR;
15175             END IF;
15176 
15177             IF ( p_create_update_flag = 'C' AND
15178                  p_organization_rec.credit_score_incd_default IS NOT NULL AND
15179                  p_organization_rec.credit_score_incd_default <> FND_API.G_MISS_NUM )
15180          OR
15181                ( p_create_update_flag = 'U' AND
15182                  ( p_organization_rec.credit_score_incd_default =  FND_API.G_MISS_NUM  OR
15183                    p_organization_rec.credit_score_incd_default IS NOT  NULL
15184          ) )
15185             THEN
15186                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15187                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_incd_default' );
15188                 FND_MSG_PUB.ADD;
15189                 x_return_status := FND_API.G_RET_STS_ERROR;
15190             END IF;
15191 
15192             IF ( p_create_update_flag = 'C' AND
15193                  p_organization_rec.credit_score_natl_percentile IS NOT NULL AND
15194                  p_organization_rec.credit_score_natl_percentile <> FND_API.G_MISS_NUM)
15195          OR
15196                ( p_create_update_flag = 'U' AND
15197                  ( p_organization_rec.credit_score_natl_percentile = FND_API.G_MISS_NUM  OR
15198                    p_organization_rec.credit_score_natl_percentile IS NOT NULL
15199          ) )
15200             THEN
15201                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15202                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'credit_score_natl_percentile' );
15203                 FND_MSG_PUB.ADD;
15204                 x_return_status := FND_API.G_RET_STS_ERROR;
15205             END IF;
15206 
15207             IF ( p_create_update_flag = 'C' AND
15208                  p_organization_rec.db_rating IS NOT NULL AND
15209                  p_organization_rec.db_rating <> FND_API.G_MISS_CHAR )
15210          OR
15211                ( p_create_update_flag = 'U' AND
15212                  ( p_organization_rec.db_rating = FND_API.G_MISS_CHAR OR
15213                    p_organization_rec.db_rating IS NOT NULL
15214          ) )
15215             THEN
15216                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15217                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'db_rating' );
15218                 FND_MSG_PUB.ADD;
15219                 x_return_status := FND_API.G_RET_STS_ERROR;
15220             END IF;
15221 
15222             IF ( p_create_update_flag = 'C' AND
15223                  p_organization_rec.debarment_ind IS NOT NULL AND
15224                  p_organization_rec.debarment_ind <> FND_API.G_MISS_CHAR )
15225          OR
15226                ( p_create_update_flag = 'U' AND
15227                  ( p_organization_rec.debarment_ind = FND_API.G_MISS_CHAR OR
15228                    p_organization_rec.debarment_ind IS NOT NULL
15229          ) )
15230             THEN
15231                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15232                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'debarment_ind' );
15233                 FND_MSG_PUB.ADD;
15234                 x_return_status := FND_API.G_RET_STS_ERROR;
15235             END IF;
15236 
15237             IF ( p_create_update_flag = 'C' AND
15238                  p_organization_rec.debarments_count IS NOT NULL AND
15239                  p_organization_rec.debarments_count <> FND_API.G_MISS_NUM )
15240          OR
15241                ( p_create_update_flag = 'U' AND
15242                  ( p_organization_rec.debarments_count = FND_API.G_MISS_NUM  OR
15243                    p_organization_rec.debarments_count IS NOT NULL
15244          ) )
15245             THEN
15246                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15247                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'debarments_count' );
15248                 FND_MSG_PUB.ADD;
15249                 x_return_status := FND_API.G_RET_STS_ERROR;
15250             END IF;
15251 
15252             IF ( p_create_update_flag = 'C' AND
15253                  p_organization_rec.debarments_date IS NOT NULL AND
15254                  p_organization_rec.debarments_date <> FND_API.G_MISS_DATE )
15255          OR
15256                ( p_create_update_flag = 'U' AND
15257                  ( p_organization_rec.debarments_date = FND_API.G_MISS_DATE OR
15258                    p_organization_rec.debarments_date IS NOT NULL
15259          ) )
15260             THEN
15261                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15262                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'debarments_date' );
15263                 FND_MSG_PUB.ADD;
15264                 x_return_status := FND_API.G_RET_STS_ERROR;
15265             END IF;
15266 
15267             IF ( p_create_update_flag = 'C' AND
15268                  p_organization_rec.high_credit IS NOT NULL AND
15269                  p_organization_rec.high_credit <> FND_API.G_MISS_NUM )
15270          OR
15271                ( p_create_update_flag = 'U' AND
15272                  ( p_organization_rec.high_credit = FND_API.G_MISS_NUM  OR
15273                    p_organization_rec.high_credit IS NOT NULL
15274          ) )
15275             THEN
15276                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15277                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'high_credit' );
15278                 FND_MSG_PUB.ADD;
15279                 x_return_status := FND_API.G_RET_STS_ERROR;
15280             END IF;
15281 
15282             IF ( p_create_update_flag = 'C' AND
15283                  p_organization_rec.maximum_credit_currency_code IS NOT NULL AND
15284                  p_organization_rec.maximum_credit_currency_code <> FND_API.G_MISS_CHAR )
15285          OR
15286                ( p_create_update_flag = 'U' AND
15287                  ( p_organization_rec.maximum_credit_currency_code = FND_API.G_MISS_CHAR OR
15288                    p_organization_rec.maximum_credit_currency_code IS NOT NULL
15289          ) )
15290             THEN
15291                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15292                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'maximum_credit_currency_code' );
15293                 FND_MSG_PUB.ADD;
15294                 x_return_status := FND_API.G_RET_STS_ERROR;
15295             END IF;
15296 
15297             IF ( p_create_update_flag = 'C' AND
15298                  p_organization_rec.maximum_credit_recommendation IS NOT NULL AND
15299                  p_organization_rec.maximum_credit_recommendation <> FND_API.G_MISS_NUM)
15300          OR
15301                ( p_create_update_flag = 'U' AND
15302                  ( p_organization_rec.maximum_credit_recommendation = FND_API.G_MISS_NUM  OR
15303                    p_organization_rec.maximum_credit_recommendation IS NOT NULL
15304          ) )
15305             THEN
15306                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15307                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'maximum_credit_recommendation' );
15308                 FND_MSG_PUB.ADD;
15309                 x_return_status := FND_API.G_RET_STS_ERROR;
15310             END IF;
15311 
15312             IF ( p_create_update_flag = 'C' AND
15313                  p_organization_rec.paydex_norm IS NOT NULL AND
15314                  p_organization_rec.paydex_norm <> FND_API.G_MISS_CHAR )
15315          OR
15316                ( p_create_update_flag = 'U' AND
15317                  ( p_organization_rec.paydex_norm = FND_API.G_MISS_CHAR OR
15318                    p_organization_rec.paydex_norm IS NOT NULL
15319          ) )
15320             THEN
15321                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15322                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'paydex_norm' );
15323                 FND_MSG_PUB.ADD;
15324                 x_return_status := FND_API.G_RET_STS_ERROR;
15325             END IF;
15326 
15327             IF ( p_create_update_flag = 'C' AND
15328                  p_organization_rec.paydex_score IS NOT NULL AND
15329                  p_organization_rec.paydex_score <> FND_API.G_MISS_CHAR )
15330          OR
15331                ( p_create_update_flag = 'U' AND
15332                  ( p_organization_rec.paydex_score = FND_API.G_MISS_CHAR OR
15333                    p_organization_rec.paydex_score IS NOT NULL
15334          ) )
15335             THEN
15336                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15337                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'paydex_score' );
15338                 FND_MSG_PUB.ADD;
15339                 x_return_status := FND_API.G_RET_STS_ERROR;
15340             END IF;
15341 
15342             IF ( p_create_update_flag = 'C' AND
15343                  p_organization_rec.paydex_three_months_ago IS NOT NULL AND
15344                  p_organization_rec.paydex_three_months_ago <> FND_API.G_MISS_CHAR )
15345          OR
15346                ( p_create_update_flag = 'U' AND
15347                  ( p_organization_rec.paydex_three_months_ago = FND_API.G_MISS_CHAR OR
15348                    p_organization_rec.paydex_three_months_ago IS NOT NULL
15349          ) )
15350             THEN
15351                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15352                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'paydex_three_months_ago' );
15353                 FND_MSG_PUB.ADD;
15354                 x_return_status := FND_API.G_RET_STS_ERROR;
15355             END IF;
15356 
15357             IF ( p_create_update_flag = 'C' AND
15358                  p_organization_rec.failure_score IS NOT NULL AND
15359                  p_organization_rec.failure_score <> FND_API.G_MISS_CHAR )
15360          OR
15361                ( p_create_update_flag = 'U' AND
15362                  ( p_organization_rec.failure_score = FND_API.G_MISS_CHAR OR
15363                    p_organization_rec.failure_score IS NOT NULL
15364          ) )
15365             THEN
15366                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15367                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score' );
15368                 FND_MSG_PUB.ADD;
15369                 x_return_status := FND_API.G_RET_STS_ERROR;
15370             END IF;
15371 
15372             IF ( p_create_update_flag = 'C' AND
15373                  p_organization_rec.failure_score_age IS NOT NULL AND
15374                  p_organization_rec.failure_score_age <> FND_API.G_MISS_NUM )
15375          OR
15376                ( p_create_update_flag = 'U' AND
15377                  ( p_organization_rec.failure_score_age = FND_API.G_MISS_NUM  OR
15378                    p_organization_rec.failure_score_age IS NOT  NULL
15379          ) )
15380             THEN
15381                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15382                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_age' );
15383                 FND_MSG_PUB.ADD;
15384                 x_return_status := FND_API.G_RET_STS_ERROR;
15385             END IF;
15386 
15387             IF ( p_create_update_flag = 'C' AND
15388                  p_organization_rec.failure_score_class IS NOT NULL AND
15389                  p_organization_rec.failure_score_class <> FND_API.G_MISS_NUM )
15390          OR
15391                ( p_create_update_flag = 'U' AND
15392                  ( p_organization_rec.failure_score_class = FND_API.G_MISS_NUM  OR
15393                    p_organization_rec.failure_score_class IS NOT NULL
15394          ) )
15395             THEN
15396                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15397                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_class' );
15398                 FND_MSG_PUB.ADD;
15399                 x_return_status := FND_API.G_RET_STS_ERROR;
15400             END IF;
15401 
15402             IF ( p_create_update_flag = 'C' AND
15403                  p_organization_rec.failure_score_commentary IS NOT NULL AND
15404                  p_organization_rec.failure_score_commentary <> FND_API.G_MISS_CHAR )
15405          OR
15406                ( p_create_update_flag = 'U' AND
15407                  ( p_organization_rec.failure_score_commentary = FND_API.G_MISS_CHAR OR
15408                    p_organization_rec.failure_score_commentary IS NOT NULL
15409          ) )
15410             THEN
15411                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15412                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary' );
15413                 FND_MSG_PUB.ADD;
15414                 x_return_status := FND_API.G_RET_STS_ERROR;
15415             END IF;
15416 
15417             IF ( p_create_update_flag = 'C' AND
15418                  p_organization_rec.failure_score_commentary2 IS NOT NULL AND
15419                  p_organization_rec.failure_score_commentary2 <> FND_API.G_MISS_CHAR )
15420          OR
15421                ( p_create_update_flag = 'U' AND
15422                  ( p_organization_rec.failure_score_commentary2 = FND_API.G_MISS_CHAR OR
15423                    p_organization_rec.failure_score_commentary2 IS NOT NULL
15424          ) )
15425             THEN
15426                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15427                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary2' );
15428                 FND_MSG_PUB.ADD;
15429                 x_return_status := FND_API.G_RET_STS_ERROR;
15430             END IF;
15431 
15432             IF ( p_create_update_flag = 'C' AND
15433                  p_organization_rec.failure_score_commentary3 IS NOT NULL AND
15434                  p_organization_rec.failure_score_commentary3 <> FND_API.G_MISS_CHAR )
15435          OR
15436                ( p_create_update_flag = 'U' AND
15437                  ( p_organization_rec.failure_score_commentary3 = FND_API.G_MISS_CHAR OR
15438                    p_organization_rec.failure_score_commentary3 IS NOT NULL
15439          ) )
15440             THEN
15441                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15442                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary3' );
15443                 FND_MSG_PUB.ADD;
15444                 x_return_status := FND_API.G_RET_STS_ERROR;
15445             END IF;
15446 
15447             IF ( p_create_update_flag = 'C' AND
15448                  p_organization_rec.failure_score_commentary4 IS NOT NULL AND
15449                  p_organization_rec.failure_score_commentary4 <> FND_API.G_MISS_CHAR )
15450          OR
15451                ( p_create_update_flag = 'U' AND
15452                  ( p_organization_rec.failure_score_commentary4 = FND_API.G_MISS_CHAR OR
15453                    p_organization_rec.failure_score_commentary4 IS NOT NULL
15454          ) )
15455             THEN
15456                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15457                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary4' );
15458                 FND_MSG_PUB.ADD;
15459                 x_return_status := FND_API.G_RET_STS_ERROR;
15460             END IF;
15461 
15462             IF ( p_create_update_flag = 'C' AND
15463                  p_organization_rec.failure_score_commentary5 IS NOT NULL AND
15464                  p_organization_rec.failure_score_commentary5 <> FND_API.G_MISS_CHAR )
15465          OR
15466                ( p_create_update_flag = 'U' AND
15467                  ( p_organization_rec.failure_score_commentary5 = FND_API.G_MISS_CHAR OR
15468                    p_organization_rec.failure_score_commentary5 IS NOT NULL
15469          ) )
15470             THEN
15471                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15472                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary5' );
15473                 FND_MSG_PUB.ADD;
15474                 x_return_status := FND_API.G_RET_STS_ERROR;
15475             END IF;
15476 
15477             IF ( p_create_update_flag = 'C' AND
15478                  p_organization_rec.failure_score_commentary6 IS NOT NULL AND
15479                  p_organization_rec.failure_score_commentary6 <> FND_API.G_MISS_CHAR )
15480          OR
15481                ( p_create_update_flag = 'U' AND
15482                  ( p_organization_rec.failure_score_commentary6 = FND_API.G_MISS_CHAR OR
15483                    p_organization_rec.failure_score_commentary6 IS NOT NULL
15484          ) )
15485             THEN
15486                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15487                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary6' );
15488                 FND_MSG_PUB.ADD;
15489                 x_return_status := FND_API.G_RET_STS_ERROR;
15490             END IF;
15491 
15492             IF ( p_create_update_flag = 'C' AND
15493                  p_organization_rec.failure_score_commentary7 IS NOT NULL AND
15494                  p_organization_rec.failure_score_commentary7 <> FND_API.G_MISS_CHAR )
15495          OR
15496                ( p_create_update_flag = 'U' AND
15497                  ( p_organization_rec.failure_score_commentary7 = FND_API.G_MISS_CHAR OR
15498                    p_organization_rec.failure_score_commentary7 IS NOT NULL
15499          ) )
15500             THEN
15501                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15502                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary7' );
15503                 FND_MSG_PUB.ADD;
15504                 x_return_status := FND_API.G_RET_STS_ERROR;
15505             END IF;
15506 
15507             IF ( p_create_update_flag = 'C' AND
15508                  p_organization_rec.failure_score_commentary8 IS NOT NULL AND
15509                  p_organization_rec.failure_score_commentary8 <> FND_API.G_MISS_CHAR )
15510          OR
15511                ( p_create_update_flag = 'U' AND
15512                  ( p_organization_rec.failure_score_commentary8 = FND_API.G_MISS_CHAR OR
15513                    p_organization_rec.failure_score_commentary8 IS NOT NULL
15514          ) )
15515             THEN
15516                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15517                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary8' );
15518                 FND_MSG_PUB.ADD;
15519                 x_return_status := FND_API.G_RET_STS_ERROR;
15520             END IF;
15521 
15522             IF ( p_create_update_flag = 'C' AND
15523                  p_organization_rec.failure_score_commentary9 IS NOT NULL AND
15524                  p_organization_rec.failure_score_commentary9 <> FND_API.G_MISS_CHAR )
15525          OR
15526                ( p_create_update_flag = 'U' AND
15527                  ( p_organization_rec.failure_score_commentary9 = FND_API.G_MISS_CHAR OR
15528                    p_organization_rec.failure_score_commentary9 IS NOT NULL
15529          ) )
15530             THEN
15531                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15532                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary9' );
15533                 FND_MSG_PUB.ADD;
15534                 x_return_status := FND_API.G_RET_STS_ERROR;
15535             END IF;
15536 
15537             IF ( p_create_update_flag = 'C' AND
15538                  p_organization_rec.failure_score_commentary10 IS NOT NULL AND
15539                  p_organization_rec.failure_score_commentary10 <> FND_API.G_MISS_CHAR )
15540          OR
15541                ( p_create_update_flag = 'U' AND
15542                  ( p_organization_rec.failure_score_commentary10 = FND_API.G_MISS_CHAR OR
15543                    p_organization_rec.failure_score_commentary10 IS NOT NULL
15544          ) )
15545             THEN
15546                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15547                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_commentary10' );
15548                 FND_MSG_PUB.ADD;
15549                 x_return_status := FND_API.G_RET_STS_ERROR;
15550             END IF;
15551 
15552             IF ( p_create_update_flag = 'C' AND
15553                  p_organization_rec.failure_score_date IS NOT NULL AND
15554                  p_organization_rec.failure_score_date <> FND_API.G_MISS_DATE )
15555          OR
15556                ( p_create_update_flag = 'U' AND
15557                  ( p_organization_rec.failure_score_date = FND_API.G_MISS_DATE OR
15558                    p_organization_rec.failure_score_date IS NOT NULL
15559          ) )
15560             THEN
15561                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15562                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_date' );
15563                 FND_MSG_PUB.ADD;
15564                 x_return_status := FND_API.G_RET_STS_ERROR;
15565             END IF;
15566 
15567             IF ( p_create_update_flag = 'C' AND
15568                  p_organization_rec.failure_score_incd_default IS NOT NULL AND
15569                  p_organization_rec.failure_score_incd_default <> FND_API.G_MISS_NUM )
15570          OR
15571                ( p_create_update_flag = 'U' AND
15572                  ( p_organization_rec.failure_score_incd_default =  FND_API.G_MISS_NUM  OR
15573                    p_organization_rec.failure_score_incd_default IS NOT  NULL
15574          ) )
15575             THEN
15576                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15577                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_incd_default' );
15578                 FND_MSG_PUB.ADD;
15579                 x_return_status := FND_API.G_RET_STS_ERROR;
15580             END IF;
15581 
15582             IF ( p_create_update_flag = 'C' AND
15583                  p_organization_rec.failure_score_natnl_percentile IS NOT NULL AND
15584                  p_organization_rec.failure_score_natnl_percentile <> FND_API.G_MISS_NUM)
15585          OR
15586                ( p_create_update_flag = 'U' AND
15587                  ( p_organization_rec.failure_score_natnl_percentile = FND_API.G_MISS_NUM  OR
15588                    p_organization_rec.failure_score_natnl_percentile IS NOT NULL
15589          ) )
15590             THEN
15591                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15592                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_natnl_percentile' );
15593                 FND_MSG_PUB.ADD;
15594                 x_return_status := FND_API.G_RET_STS_ERROR;
15595             END IF;
15596 
15597             IF ( p_create_update_flag = 'C' AND
15598                  p_organization_rec.failure_score_override_code IS NOT NULL AND
15599                  p_organization_rec.failure_score_override_code <> FND_API.G_MISS_CHAR)
15600          OR
15601                ( p_create_update_flag = 'U' AND
15602                  ( p_organization_rec.failure_score_override_code = FND_API.G_MISS_CHAR  OR
15603                    p_organization_rec.failure_score_override_code IS NOT NULL
15604          ) )
15605             THEN
15606                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15607                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'failure_score_override_code' );
15608                 FND_MSG_PUB.ADD;
15609                 x_return_status := FND_API.G_RET_STS_ERROR;
15610             END IF;
15611 
15612             IF ( p_create_update_flag = 'C' AND
15613                  p_organization_rec.global_failure_score IS NOT NULL AND
15614                  p_organization_rec.global_failure_score <> FND_API.G_MISS_CHAR)
15615          OR
15616                ( p_create_update_flag = 'U' AND
15617                  ( p_organization_rec.global_failure_score = FND_API.G_MISS_CHAR  OR
15618                    p_organization_rec.global_failure_score IS NOT NULL
15619          ) )
15620             THEN
15621                 FND_MESSAGE.SET_NAME( 'AR', 'HZ_DNB_MOVED_COLUMN' );
15622                 FND_MESSAGE.SET_TOKEN( 'COLUMN', 'global_failure_score' );
15623                 FND_MSG_PUB.ADD;
15624                 x_return_status := FND_API.G_RET_STS_ERROR;
15625             END IF;
15626 
15627         -- Debug info.
15628         /*IF G_DEBUG THEN
15629             HZ_UTILITY_V2PUB.debug ( 'validate_org_nonsupport_column (-)' );
15630         END IF;
15631         */
15632         IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
15633                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_org_nonsupport_column (-)',
15634                                p_msg_level=>fnd_log.level_procedure);
15635          END IF;
15636 
15637   END validate_org_nonsupport_column;
15638 
15639    PROCEDURE validate_rel_code (
15640       p_forward_rel_code                      IN     VARCHAR2,
15641       p_backward_rel_code                     IN     VARCHAR2,
15642       p_forward_role                          IN     VARCHAR2,
15643       p_backward_role                         IN     VARCHAR2,
15644       x_return_status                         IN OUT NOCOPY VARCHAR2
15645  ) IS
15646 
15647       l_error1                                 BOOLEAN := FALSE;
15648       l_error2                                 BOOLEAN := FALSE;
15649 
15650   BEGIN
15651 
15652       IF p_forward_rel_code = p_backward_rel_code THEN
15653         IF p_forward_role <> p_backward_role THEN
15654            fnd_message.set_name('AR', 'HZ_INVALID_ROLE1');
15655            fnd_msg_pub.add;
15656           x_return_status := FND_API.G_RET_STS_ERROR;
15657         END IF;
15658       END IF;
15659 
15660       IF p_forward_rel_code <> p_backward_rel_code THEN
15661         IF p_forward_role = p_backward_role THEN
15662            fnd_message.set_name('AR', 'HZ_INVALID_ROLE2');
15663            fnd_msg_pub.add;
15664           x_return_status := FND_API.G_RET_STS_ERROR;
15665         END IF;
15666       END IF;
15667 
15668   END validate_rel_code;
15669 
15670   /**
15671    * PROCEDURE validate_financial_report
15672    *
15673    * DESCRIPTION
15674    *     Validates financial report record. Checks for
15675    *         uniqueness
15676    *         lookup types
15677    *         mandatory columns
15678    *         non-updateable fields
15679    *         foreign key validations
15680    *         other validations
15681    *
15682    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
15683    *
15684    * ARGUMENTS
15685    *   IN:
15686    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
15687    *     p_financial_report_rec         Financial report record.
15688    *     p_rowid                        Rowid of the record (used only in update mode).
15689    *   IN/OUT:
15690    *     x_return_status                Return status after the call. The status can
15691    *                                    be FND_API.G_RET_STS_SUCCESS (success),
15692    *                                    fnd_api.g_ret_sts_error (error),
15693    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
15694    *
15695    * NOTES
15696    *
15697    * MODIFICATION HISTORY
15698    *
15699    *   29-JAN-2003   Sreedhar Mohan     o Created.
15700    *   11-MAR-2003   Sreedhar Mohan     o Bug 2829046: Changed the message token values.
15701    *   10-OCT-2003   Rajib Ranjan Borah o Bug Number 3148753.Commented old validation
15702    *                                      which did not take care of the case when both
15703    *                                      issue_period and report_start_date are not
15704    *                                      provided.Furthermore new validation does the check
15705    *                                      only if p_create_update_flag='C' as both these
15706    *                                      fields are non_updateable.
15707    *   23-MAR-2004   Rajib Ranjan Borah o Bug 3456205.Validation for party_id being a foreing
15708    *                                      key of HZ_PARTIES and party_type should be
15709    *                                      'ORGANIZATION', are performed using a single cursor now.
15710    *                                    o Validation on report_start_date, report_end_date,
15711    *                                      party_id will be performed only during creation as these
15712    *                                      are non-updateable columns.
15713    *                                    o Removed unused local variables.
15714    *   01-APR-2004   Rajib Ranjan Borah o Bug 3539597.Commented out changes incorporated in fix
15715    *                                      3200870. Issued_period and report_start_date cannot be
15716    *                                      both null or not null. Fix 3200870 had added
15717    *                                      date_report_issued to the list of attributes which cannot
15718    *                                      be NULL at the same time.
15719    *                                    o Modified cursor c_unique_financial_report_rec as it used
15720    *                                      fail earlier when issued_period was null.Truncated the
15721    *                                      date parameters.
15722    *  01-03-2005  Rajib Ranjan Borah   o SSM SST Integration and Extension.
15723    *                                      Actual_content_source will be validated against HZ_ORIG_SYSTEMS_B
15724    *                                      in HZ_MIXNM_UTILITY.ValidateContentSource instead of
15725    *                                      being validated against lookup OCNTENT_SOURCE_TYPE.
15726    */
15727 
15728   PROCEDURE validate_financial_report(
15729       p_create_update_flag                    IN      VARCHAR2,
15730       p_financial_report_rec                  IN      HZ_ORGANIZATION_INFO_V2PUB.FINANCIAL_REPORT_REC_TYPE,
15731       p_rowid                                 IN      ROWID,
15732       x_return_status                         IN OUT NOCOPY  VARCHAR2
15733  ) IS
15734 
15735      CURSOR c_dup_financial_report_id (p_financial_report_id IN NUMBER) IS
15736       SELECT 'Y'
15737       FROM   hz_financial_reports hfr
15738       WHERE  hfr.financial_report_id = p_financial_report_id;
15739 
15740      CURSOR c_unique_financial_report_rec ( p_party_id IN NUMBER,
15741                                             p_type_of_financial_report IN VARCHAR2,
15742                                             p_document_reference IN VARCHAR2,
15743                                             p_date_report_issued IN DATE,
15744                                             p_issued_period IN VARCHAR2,
15745                                             p_report_start_date IN DATE,
15746                                             p_report_end_date IN DATE,
15747                                             p_actual_content_source IN VARCHAR2) IS
15748       SELECT 'Y'
15749       FROM   hz_financial_reports
15750       WHERE  party_id = p_party_id
15751       AND    nvl(type_of_financial_report, 'XXX') = nvl(p_type_of_financial_report, 'XXX')
15752       AND    nvl(document_reference, 'XXX') = nvl(p_document_reference, 'XXX')
15753       AND    actual_content_source = nvl(p_actual_content_source,'USER_ENTERED')
15754       AND    trunc(nvl(date_report_issued, to_date('12/31/4712','MM/DD/YYYY'))) =
15755              trunc(nvl(p_date_report_issued, to_date('12/31/4712','MM/DD/YYYY')))
15756       AND    nvl(issued_period, to_date('12/31/4712','MM/DD/YYYY')) =
15757              nvl( p_issued_period, to_date('12/31/4712','MM/DD/YYYY'))
15758       AND    trunc(nvl(report_start_date, to_date('12/31/4712','MM/DD/YYYY'))) =
15759              trunc(nvl(p_report_start_date, to_date('12/31/4712','MM/DD/YYYY')))
15760       AND    trunc(nvl(report_end_date, to_date('12/31/4712','MM/DD/YYYY'))) =
15761              trunc(nvl(p_report_end_date, to_date('12/31/4712','MM/DD/YYYY')))
15762              ;
15763 
15764       CURSOR c_partytype IS
15765         SELECT hp.party_type
15766         FROM   hz_parties hp
15767         WHERE  hp.party_id = p_financial_report_rec.party_id;
15768 
15769       l_party_type                            VARCHAR2(30);
15770       l_financial_report_id                   hz_financial_reports.financial_report_id%TYPE;
15771       l_document_reference                    hz_financial_reports.document_reference%TYPE;
15772       l_date_report_issued                    hz_financial_reports.date_report_issued%TYPE;
15773       l_issued_period                         hz_financial_reports.issued_period%TYPE;
15774       l_party_id                              hz_financial_reports.party_id%TYPE;
15775 --      l_requiring_authority                   hz_financial_reports.requiring_authority%TYPE;
15776       l_type_of_financial_report              hz_financial_reports.type_of_financial_report%TYPE;
15777       l_report_start_date                     hz_financial_reports.report_start_date%TYPE;
15778       l_report_end_date                       hz_financial_reports.report_end_date%TYPE;
15779 --      l_audit_ind                             hz_financial_reports.audit_ind%TYPE;
15780 --      l_consolidated_ind                      hz_financial_reports.consolidated_ind%TYPE;
15781 --      l_estimated_ind                         hz_financial_reports.estimated_ind%TYPE;
15782 --      l_fiscal_ind                            hz_financial_reports.fiscal_ind%TYPE;
15783 --      l_final_ind                             hz_financial_reports.final_ind%TYPE;
15784 --      l_forecast_ind                          hz_financial_reports.forecast_ind%TYPE;
15785 --      l_opening_ind                           hz_financial_reports.opening_ind%TYPE;
15786 --      l_proforma_ind                          hz_financial_reports.proforma_ind%TYPE;
15787 --      l_qualified_ind                         hz_financial_reports.qualified_ind%TYPE;
15788 --      l_restated_ind                          hz_financial_reports.restated_ind%TYPE;
15789 --      l_signed_by_principals_ind              hz_financial_reports.signed_by_principals_ind%TYPE;
15790 --      l_trial_balance_ind                     hz_financial_reports.trial_balance_ind%TYPE;
15791 --      l_unbalanced_ind                        hz_financial_reports.unbalanced_ind%TYPE;
15792       l_content_source_type                   hz_financial_reports.content_source_type%TYPE;
15793       l_actual_content_source                 hz_financial_reports.actual_content_source%TYPE;
15794 --      l_request_id                            hz_financial_reports.request_id%TYPE;
15795       l_status                                hz_financial_reports.status%TYPE;
15796       l_created_by_module                     hz_financial_reports.created_by_module%TYPE;
15797 
15798 --      l_temp_issued_period                    hz_financial_reports.issued_period%TYPE;
15799 --      l_temp_report_start_date                hz_financial_reports.report_start_date%TYPE;
15800 --      l_temp_report_end_date                  hz_financial_reports.report_end_date%TYPE;
15801       l_dummy                                 VARCHAR2(1);
15802       l_debug_prefix                          VARCHAR2(30) := '';
15803 
15804   BEGIN
15805 
15806       --enable_debug;
15807 
15808       -- Debug info.
15809       /*IF g_debug THEN
15810           hz_utility_v2pub.debug ('validate_financial_report (+)');
15811       END IF;
15812       */
15813       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
15814         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_financial_report (+)',
15815                                p_msg_level=>fnd_log.level_procedure);
15816       END IF;
15817 
15818 
15819       -- do the query to get old values for update
15820 
15821       -- Bug 3456205. Some of the local variables populated by this select statement were not
15822       -- used at all and have been commented out.
15823 
15824       IF p_create_update_flag = 'U'
15825       THEN
15826           SELECT FINANCIAL_REPORT_ID,
15827                  PARTY_ID,
15828                  DOCUMENT_REFERENCE,
15829                  DATE_REPORT_ISSUED,
15830                  ISSUED_PERIOD,
15831                --  REQUIRING_AUTHORITY,
15832                  TYPE_OF_FINANCIAL_REPORT,
15833                  REPORT_START_DATE,
15834                  REPORT_END_DATE,
15835                --  AUDIT_IND,
15836                --  CONSOLIDATED_IND,
15837                --  ESTIMATED_IND,
15838                --  FISCAL_IND,
15839                --  FINAL_IND,
15840                --  FORECAST_IND,
15841                --  OPENING_IND,
15842                --  PROFORMA_IND,
15843                --  QUALIFIED_IND,
15844                --  RESTATED_IND,
15845                --  SIGNED_BY_PRINCIPALS_IND,
15846                --  TRIAL_BALANCE_IND,
15847                --  UNBALANCED_IND,
15848                  CONTENT_SOURCE_TYPE,
15849                  ACTUAL_CONTENT_SOURCE,
15850                --  REQUEST_ID,
15851                  STATUS,
15852                  CREATED_BY_MODULE
15853           INTO   l_financial_report_id,
15854                  l_party_id,
15855                  l_document_reference,
15856                  l_date_report_issued,
15857                  l_issued_period,
15858                --  l_requiring_authority,
15859                  l_type_of_financial_report,
15860                  l_report_start_date,
15861                  l_report_end_date,
15862                --  l_audit_ind,
15863                --  l_consolidated_ind,
15864                --  l_estimated_ind,
15865                --  l_fiscal_ind,
15866                --  l_final_ind,
15867                --  l_forecast_ind,
15868                --  l_opening_ind,
15869                --  l_proforma_ind,
15870                --  l_qualified_ind,
15871                --  l_restated_ind,
15872                --  l_signed_by_principals_ind,
15873                --  l_trial_balance_ind,
15874                --  l_unbalanced_ind,
15875                  l_content_source_type,
15876                  l_actual_content_source,
15877                --  l_request_id,
15878                  l_status,
15879                  l_created_by_module
15880           FROM   HZ_FINANCIAL_REPORTS
15881           WHERE  ROWID = p_rowid;
15882       END IF;
15883 
15884       -------------------------------------
15885       -- validation for financial_report_id
15886       -------------------------------------
15887 /****Logical APIs - validation not required****/
15888   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
15889       --check for unique financial_report_id
15890       IF p_create_update_flag = 'C' THEN
15891         IF p_financial_report_rec.financial_report_id IS NOT NULL AND
15892            p_financial_report_rec.financial_report_id <> fnd_api.g_miss_num
15893         THEN
15894           OPEN c_dup_financial_report_id (p_financial_report_rec.financial_report_id);
15895           FETCH c_dup_financial_report_id INTO l_dummy;
15896 
15897           -- key is not unique, push an error onto the stack.
15898           IF NVL(c_dup_financial_report_id%FOUND, FALSE) THEN
15899             fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
15900             fnd_message.set_token('COLUMN', 'financial_report_id');
15901             fnd_msg_pub.add;
15902             x_return_status := fnd_api.g_ret_sts_error;
15903           END IF;
15904           CLOSE c_dup_financial_report_id;
15905 
15906           /*IF g_debug THEN
15907             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
15908               'check that financial_report_id is unique during creation. ' ||
15909               ' x_return_status = ' || x_return_status, l_debug_prefix);
15910           END IF;
15911           */
15912           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
15913              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'check that financial_report_id is unique during creation. ' ||
15914                                     ' x_return_status = ' || x_return_status,
15915                                   p_msg_level=>fnd_log.level_statement);
15916           END IF;
15917 
15918 
15919         END IF;
15920       END IF;
15921 
15922       /*IF g_debug THEN
15923         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
15924           '(+) after validate financial_report_id ... ' ||
15925           'x_return_status = ' || x_return_status, l_debug_prefix);
15926       END IF;
15927       */
15928       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
15929            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate financial_report_id ... ' ||
15930                                              'x_return_status = ' || x_return_status,
15931                                   p_msg_level=>fnd_log.level_statement);
15932       END IF;
15933 
15934 
15935       -- financial_report_id is non-updateable field
15936       IF p_create_update_flag = 'U' THEN
15937           validate_nonupdateable (
15938               p_column                                => 'financial_report_id',
15939               p_column_value                          => p_financial_report_rec.financial_report_id,
15940               p_old_column_value                      => l_financial_report_id,
15941               x_return_status                         => x_return_status);
15942 
15943           /*IF g_debug THEN
15944               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
15945                   'financial_report_id is non-updateable field. ' ||
15946                   'x_return_status = ' || x_return_status, l_debug_prefix);
15947           END IF;
15948           */
15949           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
15950               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'financial_report_id is non-updateable field. ' ||
15951                                         'x_return_status = ' || x_return_status,
15952                                   p_msg_level=>fnd_log.level_statement);
15953           END IF;
15954 
15955 
15956       END IF;
15957   END IF;
15958 
15959       --------------------------
15960       -- validation for party_id
15961       --------------------------
15962 /****Logical APIs - validation not required****/
15963   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
15964       -- party_id is mandatory field
15965       IF p_create_update_flag = 'C' THEN
15966           validate_mandatory (
15967               p_create_update_flag                    => p_create_update_flag,
15968               p_column                                => 'party_id',
15969               p_column_value                          => p_financial_report_rec.party_id,
15970               x_return_status                         => x_return_status);
15971 
15972           /*IF g_debug THEN
15973               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
15974                   'party_id is mandatory field. ' ||
15975                   'x_return_status = ' || x_return_status, l_debug_prefix);
15976           END IF;
15977           */
15978           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
15979              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
15980                                         'x_return_status = ' || x_return_status,
15981                                   p_msg_level=>fnd_log.level_statement);
15982           END IF;
15983 
15984 
15985       END IF;
15986 
15987       -- party_id is non-updateable field
15988       IF p_create_update_flag = 'U' THEN
15989           validate_nonupdateable (
15990               p_column                                => 'party_id',
15991               p_column_value                          => p_financial_report_rec.party_id,
15992               p_old_column_value                      => l_party_id,
15993               x_return_status                         => x_return_status);
15994 
15995           /*IF g_debug THEN
15996               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
15997                   'party_id is non-updateable field. ' ||
15998                   'x_return_status = ' || x_return_status, l_debug_prefix);
15999           END IF;
16000           */
16001           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16002              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
16003                                          'x_return_status = ' || x_return_status,
16004                                   p_msg_level=>fnd_log.level_statement);
16005           END IF;
16006 
16007 
16008       END IF;
16009 /*
16010       -- party_id has foreign key HZ_PARTIES.PARTY_ID
16011       IF p_create_update_flag = 'C'
16012          AND
16013          p_financial_report_rec.party_id IS NOT NULL
16014          AND
16015          p_financial_report_rec.party_id <> fnd_api.g_miss_num
16016       THEN
16017           BEGIN
16018               SELECT 'Y'
16019               INTO   l_dummy
16020               FROM   hz_parties p
16021               WHERE  p.party_id = p_financial_report_rec.party_id;
16022 
16023           EXCEPTION
16024               WHEN NO_DATA_FOUND THEN
16025                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
16026                   fnd_message.set_token('FK', 'party_id');
16027                   fnd_message.set_token('COLUMN', 'party_id');
16028                   fnd_message.set_token('TABLE', 'hz_parties');
16029                   fnd_msg_pub.add;
16030                   x_return_status := fnd_api.g_ret_sts_error;
16031           END;
16032 */
16033           /*IF g_debug THEN
16034               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16035                   'party_id has foreign key hz_parties.party_id. ' ||
16036                   'x_return_status = ' || x_return_status, l_debug_prefix);
16037           END IF;
16038           */
16039 /*          IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16040              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
16041                                                  'x_return_status = ' || x_return_status,
16042                                   p_msg_level=>fnd_log.level_statement);
16043           END IF;
16044 
16045 
16046       END IF;
16047 */
16048       -- make sure that the l_party_id belongs to an organization.
16049       IF p_create_update_flag = 'C'
16050         /* Bug 3456205 Party_id is not updateable.
16051          OR
16052          p_create_update_flag = 'U'
16053          If the value is NULL / G_MISS, error should be thrown in validate_mandatory only.
16054          */
16055          AND p_financial_report_rec.party_id IS NOT NULL
16056          AND p_financial_report_rec.party_id <> FND_API.G_MISS_NUM
16057       THEN
16058           --Bug 2886268: Added the following code instead of calling check_organization
16059           OPEN c_partytype;
16060 
16061           FETCH c_partytype INTO l_party_type;
16062           IF c_partytype%FOUND
16063           THEN
16064               IF rtrim(ltrim(l_party_type)) <> 'ORGANIZATION'
16065               THEN
16066                   -- This is not an organization. Hence throw error
16067                   fnd_message.set_name('AR', 'HZ_API_INVALID_PARTY_TYPE');
16068                   fnd_message.set_token('PARTY_ID', TO_CHAR(p_financial_report_rec.party_id));
16069                   fnd_message.set_token('TYPE', 'ORGANIZATION');
16070                   fnd_msg_pub.add;
16071                   x_return_status := fnd_api.g_ret_sts_error;
16072               END IF;
16073           ELSE -- 3456205
16074               -- party_id has foreign key HZ_PARTIES.PARTY_ID
16075               -- However since no record found in HZ_PARTIES, therefore throw error.
16076               fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
16077               fnd_message.set_token('FK', 'party_id');
16078               fnd_message.set_token('COLUMN', 'party_id');
16079               fnd_message.set_token('TABLE', 'hz_parties');
16080               fnd_msg_pub.add;
16081               x_return_status := fnd_api.g_ret_sts_error;
16082           END IF;
16083           CLOSE c_partytype;
16084           --Bug 2886268: Commented out the following call as it is throwing erroneous message
16085           --check_organization(p_financial_report_rec.party_id, x_return_status);
16086       END IF;
16087       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16088              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
16089                                                  'x_return_status = ' || x_return_status,
16090                                   p_msg_level=>fnd_log.level_statement);
16091       END IF;
16092   END IF;
16093 
16094       -------------------------------
16095       -- validation for issued_period
16096       -------------------------------
16097       --Either issued_period or report_start_date must be provided (not both).
16098       --Added database values when passed with null values
16099 
16100       --Bug Number 3148753.Commented the validation code as it only checked for the case
16101       --when both the values are set.
16102       --There is no validation for the case when both the values are not provided.
16103 
16104       --Furthermore as both the fields are non-updateable, therefore it is enough to check
16105       --during creation that only one of the fields is being provided.
16106 
16107       /*
16108       |IF ((nvl(p_financial_report_rec.issued_period, l_issued_period) IS NOT NULL AND
16109       |     nvl(p_financial_report_rec.issued_period, l_issued_period) <> fnd_api.g_miss_char) AND
16110       |    (nvl(p_financial_report_rec.report_start_date, l_report_start_date) IS NOT NULL AND
16111       |    nvl(p_financial_report_rec.report_start_date, l_report_start_date) <> fnd_api.g_miss_date))
16112       |THEN
16113       |   fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION2');
16114       |   fnd_message.set_token('COLUMN1', 'issued_period');
16115       |   fnd_message.set_token('COLUMN2', 'report_start_date');
16116       |   fnd_msg_pub.add;
16117       |   x_return_status := fnd_api.g_ret_sts_error;
16118       |END IF;
16119       */
16120 
16121       --Bug Number 3148753.As both the fields are non-updateable,therefore validation
16122       --during creation is enough.
16123 
16124 
16125       IF(p_create_update_flag='C')
16126       THEN
16127         IF (
16128              (--Both the values are not set during creation.
16129                (
16130                p_financial_report_rec.issued_period IS NULL
16131                OR
16132                p_financial_report_rec.issued_period = fnd_api.g_miss_char
16133                )
16134              AND
16135                (
16136                p_financial_report_rec.report_start_date IS NULL
16137                OR
16138                p_financial_report_rec.report_start_date = fnd_api.g_miss_date
16139                )
16140 /*           Bug 3539597.Commented out changes incorporated in fix 3200870.
16141  |           AND
16142  |             (
16143  |             p_financial_report_rec.DATE_REPORT_ISSUED IS NULL
16144  |             OR
16145  |             p_financial_report_rec.DATE_REPORT_ISSUED = fnd_api.g_miss_date
16146  |             )
16147  */
16148              )
16149            OR
16150              (--Both the values are provided during creation
16151                (
16152                p_financial_report_rec.issued_period IS NOT NULL
16153                AND
16154                p_financial_report_rec.issued_period <> fnd_api.g_miss_char
16155                )
16156              AND
16157                (
16158                p_financial_report_rec.report_start_date IS NOT NULL
16159                AND
16160                p_financial_report_rec.report_start_date <> fnd_api.g_miss_date
16161                )
16162              )
16163            )
16164         THEN
16165           fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION2');
16166           fnd_message.set_token('COLUMN1', 'issued_period');
16167           fnd_message.set_token('COLUMN2', 'report_start_date');
16168           fnd_msg_pub.add;
16169           x_return_status := fnd_api.g_ret_sts_error;
16170         END IF;
16171       END IF;
16172 
16173       -----------------------------------
16174       -- validation for report_start_date
16175       -----------------------------------
16176 
16177    -- bug 4417943.
16178    IF p_create_update_flag = 'C' /*Bug 3456205 Both these columns are non-updateable */
16179    AND  (
16180          (p_financial_report_rec.report_start_date IS NOT NULL
16181           AND p_financial_report_rec.report_start_date <> fnd_api.g_miss_date
16182           AND (p_financial_report_rec.report_end_date IS NULL OR
16183                p_financial_report_rec.report_end_date = fnd_api.g_miss_date )
16184           ) OR
16185           (p_financial_report_rec.report_end_date IS NOT NULL
16186            AND  p_financial_report_rec.report_end_date <> fnd_api.g_miss_date
16187            AND (p_financial_report_rec.report_start_date IS NULL OR
16188                 p_financial_report_rec.report_start_date = fnd_api.g_miss_date)
16189           ))
16190    THEN
16191         fnd_message.set_name('AR', 'HZ_API_INVALID_COMBINATION3');
16192         fnd_message.set_token('COLUMN1', 'report_start_date');
16193         fnd_message.set_token('COLUMN2', 'report_end_date');
16194         fnd_msg_pub.add;
16195         x_return_status := fnd_api.g_ret_sts_error;
16196    END IF;
16197 
16198       --Bug 2888670: Modified the end_date validation as per V1 validation.
16199       --If report_start_date is provided, then it must be less than or equal
16200       --to report_end_date.
16201 
16202       IF p_create_update_flag = 'C' THEN
16203          IF p_financial_report_rec.report_end_date is  NOT NULL  AND
16204             p_financial_report_rec.report_end_date <> FND_API.G_MISS_DATE  THEN
16205               if (p_financial_report_rec.report_end_date
16206                   < p_financial_report_rec.report_start_date
16207                   )  THEN
16208                     FND_MESSAGE.SET_NAME('AR', 'HZ_API_START_DATE_GREATER');
16209                     FND_MSG_PUB.ADD;
16210                     x_return_status := FND_API.G_RET_STS_ERROR;
16211               end if;
16212           END IF;
16213       END IF;
16214 
16215       /* Bug 3456205. As both report_start_date, report_end_date are non-updateable,
16216         therefore this validation need not be performed during updation.
16217 
16218       -- compare end_date with database data and user passed data.
16219       ELSIF p_create_update_flag = 'U' THEN
16220              if (p_financial_report_rec.report_end_date is  NOT NULL  AND
16221                  p_financial_report_rec.report_end_date <> FND_API.G_MISS_DATE)   THEN
16222                    if p_financial_report_rec.report_start_date is NOT NULL  AND
16223                       p_financial_report_rec.report_start_date <> FND_API.G_MISS_DATE  then
16224                         if p_financial_report_rec.report_end_date
16225                            < p_financial_report_rec.report_start_date then
16226                              FND_MESSAGE.SET_NAME('AR', 'HZ_API_START_DATE_GREATER');
16227                              FND_MSG_PUB.ADD;
16228                              x_return_status := FND_API.G_RET_STS_ERROR;
16229 
16230                         end if;
16231                    elsif ( p_financial_report_rec.report_end_date < l_report_start_date  OR
16232                            l_report_start_date is NULL) then
16233                            FND_MESSAGE.SET_NAME('AR', 'HZ_API_START_DATE_GREATER');
16234                            FND_MSG_PUB.ADD;
16235                            x_return_status := FND_API.G_RET_STS_ERROR;
16236 
16237                    end if;
16238               elsif (p_financial_report_rec.report_start_date is  NOT NULL  AND
16239                      p_financial_report_rec.report_start_date <> FND_API.G_MISS_DATE)   THEN
16240                       if l_report_end_date < p_financial_report_rec.report_start_date then
16241                         FND_MESSAGE.SET_NAME('AR', 'HZ_API_START_DATE_GREATER');
16242                         FND_MSG_PUB.ADD;
16243                         x_return_status := FND_API.G_RET_STS_ERROR;
16244 
16245                       end if;
16246               end if;
16247 
16248       END IF;*/
16249 
16250       ---------------------------------------
16251       --Bug 2868953: Unique record Validation
16252       ---------------------------------------
16253       IF p_create_update_flag = 'C' THEN
16254          OPEN c_unique_financial_report_rec ( p_financial_report_rec.party_id,
16255                                               p_financial_report_rec.type_of_financial_report,
16256                                               p_financial_report_rec.document_reference,
16257                                               p_financial_report_rec.date_report_issued,
16258                                               p_financial_report_rec.issued_period,
16259                                               p_financial_report_rec.report_start_date,
16260                                               p_financial_report_rec.report_end_date,
16261                                               p_financial_report_rec.actual_content_source);
16262 
16263           FETCH c_unique_financial_report_rec INTO l_dummy;
16264 
16265           -- combination key is not unique, push an error onto the stack.
16266           IF NVL(c_unique_financial_report_rec%FOUND, FALSE) THEN
16267             fnd_message.set_name('AR', 'HZ_API_DUP_FIN_REPORT_REC');
16268             fnd_msg_pub.add;
16269             x_return_status := fnd_api.g_ret_sts_error;
16270           END IF;
16271           CLOSE c_unique_financial_report_rec;
16272 
16273           /*IF g_debug THEN
16274             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16275               'The following column combination should be unique:' ||
16276               ' PARTY_ID, FINANCIAL_REPORT_TYPE, DOCUMENT_REFERENCE, DATE_REPORT_ISSUED, ' ||
16277               ' (ISSUED_PERIOD or REPORT_START_DATE and REPORT_END_DATE).' ||
16278               ' x_return_status = ' || x_return_status, l_debug_prefix);
16279           END IF;
16280           */
16281           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16282                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16283                  p_message=>'The following column combination should be unique:' ||
16284                                               ' PARTY_ID, FINANCIAL_REPORT_TYPE, DOCUMENT_REFERENCE, DATE_REPORT_ISSUED, ' ||
16285                                               ' (ISSUED_PERIOD or REPORT_START_DATE and REPORT_END_DATE).' ||
16286                                               ' x_return_status = ' || x_return_status,
16287                                   p_msg_level=>fnd_log.level_statement);
16288           END IF;
16289 
16290       END IF;
16291       -- type_of_financial_report is non-updateable field
16292       IF p_create_update_flag = 'U' THEN
16293           validate_nonupdateable (
16294               p_column                                => 'type_of_financial_report',
16295               p_column_value                          => p_financial_report_rec.type_of_financial_report,
16296               p_old_column_value                      => l_type_of_financial_report,
16297               x_return_status                         => x_return_status);
16298 
16299           /*IF g_debug THEN
16300               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16301                   'type_of_financial_report is non-updateable field. ' ||
16302                   'x_return_status = ' || x_return_status, l_debug_prefix);
16303           END IF;
16304           */
16305           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16306             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'type_of_financial_report is non-updateable field. ' ||
16307                                                  'x_return_status = ' || x_return_status,
16308                                   p_msg_level=>fnd_log.level_statement);
16309           END IF;
16310 
16311 
16312       END IF;
16313       -- document_reference is non-updateable field
16314       IF p_create_update_flag = 'U' THEN
16315           validate_nonupdateable (
16316               p_column                                => 'document_reference',
16317               p_column_value                          => p_financial_report_rec.document_reference,
16318               p_old_column_value                      => l_document_reference,
16319               x_return_status                         => x_return_status);
16320 
16321           /*IF g_debug THEN
16322               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16323                   'document_reference is non-updateable field. ' ||
16324                   'x_return_status = ' || x_return_status, l_debug_prefix);
16325           END IF;
16326           */
16327           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16328                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'document_reference is non-updateable field. ' ||
16329                   'x_return_status = ' || x_return_status,
16330                                   p_msg_level=>fnd_log.level_statement);
16331           END IF;
16332 
16333 
16334       END IF;
16335       -- date_report_issued is non-updateable field
16336       IF p_create_update_flag = 'U' THEN
16337           validate_nonupdateable (
16338               p_column                                => 'date_report_issued',
16339               p_column_value                          => trunc(p_financial_report_rec.date_report_issued),
16340               p_old_column_value                      => trunc(l_date_report_issued),
16341               x_return_status                         => x_return_status);
16342 
16343           /*IF g_debug THEN
16344               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16345                   'date_report_issued is non-updateable field. ' ||
16346                   'x_return_status = ' || x_return_status, l_debug_prefix);
16347           END IF;
16348           */
16349           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16350              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'date_report_issued is non-updateable field. ' ||
16351                                                'x_return_status = ' || x_return_status,
16352                                   p_msg_level=>fnd_log.level_statement);
16353           END IF;
16354 
16355 
16356       END IF;
16357       -- issued_period is non-updateable field
16358       IF p_create_update_flag = 'U' THEN
16359           validate_nonupdateable (
16360               p_column                                => 'issued_period',
16361               p_column_value                          => p_financial_report_rec.issued_period,
16362               p_old_column_value                      => l_issued_period,
16363               x_return_status                         => x_return_status);
16364 
16365           /*IF g_debug THEN
16366               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16367                   'issued_period is non-updateable field. ' ||
16368                   'x_return_status = ' || x_return_status, l_debug_prefix);
16369           END IF;
16370           */
16371           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16372              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'issued_period is non-updateable field. ' ||
16373                   'x_return_status = ' || x_return_status,
16374                                   p_msg_level=>fnd_log.level_statement);
16375           END IF;
16376 
16377 
16378       END IF;
16379       -- report_start_date is non-updateable field
16380       IF p_create_update_flag = 'U' THEN
16381           validate_nonupdateable (
16382               p_column                                => 'report_start_date',
16383               p_column_value                          => trunc(p_financial_report_rec.report_start_date),
16384               p_old_column_value                      => trunc(l_report_start_date),
16385               x_return_status                         => x_return_status);
16386 
16387           /*IF g_debug THEN
16388               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16389                   'report_start_date is non-updateable field. ' ||
16390                   'x_return_status = ' || x_return_status, l_debug_prefix);
16391           END IF;
16392           */
16393           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16394                   hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'report_start_date is non-updateable field. ' ||
16395                                          'x_return_status = ' || x_return_status,
16396                                   p_msg_level=>fnd_log.level_statement);
16397            END IF;
16398 
16399 
16400       END IF;
16401       -- report_end_date is non-updateable field
16402       IF p_create_update_flag = 'U' THEN
16403           validate_nonupdateable (
16404               p_column                                => 'report_end_date',
16405               p_column_value                          => trunc(p_financial_report_rec.report_end_date),
16406               p_old_column_value                      => trunc(l_report_end_date),
16407               x_return_status                         => x_return_status);
16408 
16409           /*IF g_debug THEN
16410               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16411                   'report_end_date is non-updateable field. ' ||
16412                   'x_return_status = ' || x_return_status, l_debug_prefix);
16413           END IF;
16414           */
16415           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16416             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'report_end_date is non-updateable field. ' ||
16417                         'x_return_status = ' || x_return_status,
16418                                   p_msg_level=>fnd_log.level_statement);
16419           END IF;
16420 
16421 
16422       END IF;
16423       ------------------------------------
16424       --Lookup Validations
16425       --validation for audit_ind
16426       ------------------------------------
16427 /****Logical APIs - validation not required****/
16428   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16429       -- audit_ind is lookup code in lookup type YES/NO
16430       validate_lookup (
16431           p_column                                => 'audit_ind',
16432           p_lookup_type                           => 'YES/NO',
16433           p_column_value                          => p_financial_report_rec.audit_ind,
16434           x_return_status                         => x_return_status);
16435 
16436       /*IF g_debug THEN
16437           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16438               'audit_ind should be in lookup YES/NO. ' ||
16439               'x_return_status = ' || x_return_status, l_debug_prefix);
16440       END IF;
16441       */
16442       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16443            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'audit_ind should be in lookup YES/NO. ' ||
16444                                         'x_return_status = ' || x_return_status,
16445                                   p_msg_level=>fnd_log.level_statement);
16446       END IF;
16447   END IF;
16448 
16449       ----------------------------------
16450       -- validation for consolidated_ind
16451       ----------------------------------
16452 /****Logical APIs - validation not required****/
16453   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16454       -- consolidated_ind is lookup code in lookup type YES/NO
16455       validate_lookup (
16456           p_column                                => 'consolidated_ind',
16457           p_lookup_type                           => 'YES/NO',
16458           p_column_value                          => p_financial_report_rec.consolidated_ind,
16459           x_return_status                         => x_return_status);
16460 
16461       /*IF g_debug THEN
16462           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16463               'consolidated_ind should be in lookup YES/NO. ' ||
16464               'x_return_status = ' || x_return_status, l_debug_prefix);
16465       END IF;
16466       */
16467       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16468            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'consolidated_ind should be in lookup YES/NO. ' ||
16469                                         'x_return_status = ' || x_return_status,
16470                                   p_msg_level=>fnd_log.level_statement);
16471       END IF;
16472   END IF;
16473 
16474       ------------------------------------
16475       --validation for estimated_ind
16476       ------------------------------------
16477 /****Logical APIs - validation not required****/
16478   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16479       -- estimated_ind is lookup code in lookup type YES/NO
16480       validate_lookup (
16481           p_column                                => 'estimated_ind',
16482           p_lookup_type                           => 'YES/NO',
16483           p_column_value                          => p_financial_report_rec.estimated_ind,
16484           x_return_status                         => x_return_status);
16485 
16486       /*IF g_debug THEN
16487           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16488               'estimated_ind should be in lookup YES/NO. ' ||
16489               'x_return_status = ' || x_return_status, l_debug_prefix);
16490       END IF;
16491       */
16492       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16493            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'estimated_ind should be in lookup YES/NO. ' ||
16494                                         'x_return_status = ' || x_return_status,
16495                                   p_msg_level=>fnd_log.level_statement);
16496        END IF;
16497   END IF;
16498 
16499       ----------------------------------
16500       -- validation for fiscal_ind
16501       ----------------------------------
16502 /****Logical APIs - validation not required****/
16503   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16504       -- fiscal_ind is lookup code in lookup type YES/NO
16505       validate_lookup (
16506           p_column                                => 'fiscal_ind',
16507           p_lookup_type                           => 'YES/NO',
16508           p_column_value                          => p_financial_report_rec.fiscal_ind,
16509           x_return_status                         => x_return_status);
16510 
16511       /*IF g_debug THEN
16512           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16513               'fiscal_ind should be in lookup YES/NO. ' ||
16514               'x_return_status = ' || x_return_status, l_debug_prefix);
16515       END IF;
16516       */
16517       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16518            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'fiscal_ind should be in lookup YES/NO. ' ||
16519                                                  'x_return_status = ' || x_return_status,
16520                                   p_msg_level=>fnd_log.level_statement);
16521       END IF;
16522   END IF;
16523 
16524      --Bug 2940399: Added FINAL_IND column in financial_report_rec_type. Hence
16525      --added the validation for final_ind.
16526 
16527       ----------------------------------
16528       -- validation for final_ind
16529       ----------------------------------
16530 /****Logical APIs - validation not required****/
16531   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16532       -- fiscal_ind is lookup code in lookup type YES/NO
16533       validate_lookup (
16534           p_column                                => 'final_ind',
16535           p_lookup_type                           => 'YES/NO',
16536           p_column_value                          => p_financial_report_rec.final_ind,
16537           x_return_status                         => x_return_status);
16538 
16539       /*IF g_debug THEN
16540           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16541               'final_ind should be in lookup YES/NO. ' ||
16542               'x_return_status = ' || x_return_status, l_debug_prefix);
16543       END IF;
16544       */
16545       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16546            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'final_ind should be in lookup YES/NO. ' ||
16547               'x_return_status = ' || x_return_status,
16548                                   p_msg_level=>fnd_log.level_statement);
16549       END IF;
16550   END IF;
16551 
16552       ------------------------------------
16553       --validation for forecast_ind
16554       ------------------------------------
16555 /****Logical APIs - validation not required****/
16556   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16557       -- forecast_ind is lookup code in lookup type YES/NO
16558       validate_lookup (
16559           p_column                                => 'forecast_ind',
16560           p_lookup_type                           => 'YES/NO',
16561           p_column_value                          => p_financial_report_rec.forecast_ind,
16562           x_return_status                         => x_return_status);
16563 
16564       /*IF g_debug THEN
16565           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16566               'forecast_ind should be in lookup YES/NO. ' ||
16567               'x_return_status = ' || x_return_status, l_debug_prefix);
16568       END IF;
16569       */
16570       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16571            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'forecast_ind should be in lookup YES/NO. ' ||
16572                                                 'x_return_status = ' || x_return_status,
16573                                   p_msg_level=>fnd_log.level_statement);
16574       END IF;
16575   END IF;
16576 
16577       ----------------------------------
16578       -- validation for opening_ind
16579       ----------------------------------
16580 /****Logical APIs - validation not required****/
16581   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16582       -- opening_ind is lookup code in lookup type YES/NO
16583       validate_lookup (
16584           p_column                                => 'opening_ind',
16585           p_lookup_type                           => 'YES/NO',
16586           p_column_value                          => p_financial_report_rec.opening_ind,
16587           x_return_status                         => x_return_status);
16588 
16589       /*IF g_debug THEN
16590           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16591               'opening_ind should be in lookup YES/NO. ' ||
16592               'x_return_status = ' || x_return_status, l_debug_prefix);
16593       END IF;
16594       */
16595       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16596            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'opening_ind should be in lookup YES/NO. ' ||
16597                                                 'x_return_status = ' || x_return_status,
16598                                   p_msg_level=>fnd_log.level_statement);
16599       END IF;
16600   END IF;
16601 
16602       ------------------------------------
16603       --validation for proforma_ind
16604       ------------------------------------
16605 /****Logical APIs - validation not required****/
16606   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16607       -- proforma_ind is lookup code in lookup type YES/NO
16608       validate_lookup (
16609           p_column                                => 'proforma_ind',
16610           p_lookup_type                           => 'YES/NO',
16611           p_column_value                          => p_financial_report_rec.proforma_ind,
16612           x_return_status                         => x_return_status);
16613 
16614       /*IF g_debug THEN
16615           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16616               'proforma_ind should be in lookup YES/NO. ' ||
16617               'x_return_status = ' || x_return_status, l_debug_prefix);
16618       END IF;
16619       */
16620       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16621            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'proforma_ind should be in lookup YES/NO. ' ||
16622                                          'x_return_status = ' || x_return_status,
16623                                   p_msg_level=>fnd_log.level_statement);
16624       END IF;
16625   END IF;
16626 
16627       ----------------------------------
16628       -- validation for qualified_ind
16629       ----------------------------------
16630 /****Logical APIs - validation not required****/
16631   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16632       -- qualified_ind is lookup code in lookup type YES/NO
16633       validate_lookup (
16634           p_column                                => 'qualified_ind',
16635           p_lookup_type                           => 'YES/NO',
16636           p_column_value                          => p_financial_report_rec.qualified_ind,
16637           x_return_status                         => x_return_status);
16638 
16639       /*IF g_debug THEN
16640           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16641               'qualified_ind should be in lookup YES/NO. ' ||
16642               'x_return_status = ' || x_return_status, l_debug_prefix);
16643       END IF;
16644       */
16645       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16646            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'qualified_ind should be in lookup YES/NO. ' ||
16647                         'x_return_status = ' || x_return_status,
16648                                   p_msg_level=>fnd_log.level_statement);
16649       END IF;
16650   END IF;
16651 
16652       ------------------------------------
16653       --validation for restated_ind
16654       ------------------------------------
16655 /****Logical APIs - validation not required****/
16656   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16657       -- restated_ind is lookup code in lookup type YES/NO
16658       validate_lookup (
16659           p_column                                => 'restated_ind',
16660           p_lookup_type                           => 'YES/NO',
16661           p_column_value                          => p_financial_report_rec.restated_ind,
16662           x_return_status                         => x_return_status);
16663 
16664       /*IF g_debug THEN
16665           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16666               'restated_ind should be in lookup YES/NO. ' ||
16667               'x_return_status = ' || x_return_status, l_debug_prefix);
16668       END IF;
16669       */
16670       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16671            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'restated_ind should be in lookup YES/NO. ' ||
16672                                                 'x_return_status = ' || x_return_status,
16673                                   p_msg_level=>fnd_log.level_statement);
16674       END IF;
16675   END IF;
16676 
16677       ----------------------------------
16678       -- validation for signed_by_principals_ind
16679       ----------------------------------
16680 /****Logical APIs - validation not required****/
16681   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16682       -- signed_by_principals_ind is lookup code in lookup type YES/NO
16683       validate_lookup (
16684           p_column                                => 'signed_by_principals_ind',
16685           p_lookup_type                           => 'YES/NO',
16686           p_column_value                          => p_financial_report_rec.signed_by_principals_ind,
16687           x_return_status                         => x_return_status);
16688 
16689       /*IF g_debug THEN
16690           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16691               'signed_by_principals_ind should be in lookup YES/NO. ' ||
16692               'x_return_status = ' || x_return_status, l_debug_prefix);
16693       END IF;
16694       */
16695       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16696            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'signed_by_principals_ind should be in lookup YES/NO. ' ||
16697                                              'x_return_status = ' || x_return_status,
16698                                   p_msg_level=>fnd_log.level_statement);
16699      END IF;
16700   END IF;
16701 
16702       ------------------------------------
16703       --validation for trial_balance_ind
16704       ------------------------------------
16705 /****Logical APIs - validation not required****/
16706   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16707       -- trial_balance_ind is lookup code in lookup type YES/NO
16708       validate_lookup (
16709           p_column                                => 'trial_balance_ind',
16710           p_lookup_type                           => 'YES/NO',
16711           p_column_value                          => p_financial_report_rec.trial_balance_ind,
16712           x_return_status                         => x_return_status);
16713 
16714       /*IF g_debug THEN
16715           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16716               'trial_balance_ind should be in lookup YES/NO. ' ||
16717               'x_return_status = ' || x_return_status, l_debug_prefix);
16718       END IF;
16719       */
16720       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16721            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'trial_balance_ind should be in lookup YES/NO. ' ||
16722                                                  'x_return_status = ' || x_return_status,
16723                                   p_msg_level=>fnd_log.level_statement);
16724       END IF;
16725   END IF;
16726 
16727       ----------------------------------
16728       -- validation for unbalanced_ind
16729       ----------------------------------
16730 /****Logical APIs - validation not required****/
16731   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16732       -- unbalanced_ind is lookup code in lookup type YES/NO
16733       validate_lookup (
16734           p_column                                => 'unbalanced_ind',
16735           p_lookup_type                           => 'YES/NO',
16736           p_column_value                          => p_financial_report_rec.unbalanced_ind,
16737           x_return_status                         => x_return_status);
16738 
16739       /*IF g_debug THEN
16740           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16741               'unbalanced_ind should be in lookup YES/NO. ' ||
16742               'x_return_status = ' || x_return_status, l_debug_prefix);
16743       END IF;
16744       */
16745       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16746            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'unbalanced_ind should be in lookup YES/NO. ' ||
16747               'x_return_status = ' || x_return_status,
16748                                   p_msg_level=>fnd_log.level_statement);
16749       END IF;
16750   END IF;
16751 
16752       ------------------------
16753       -- validation for status
16754       ------------------------
16755 /****Logical APIs - validation not required****/
16756   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16757       -- status is lookup code in lookup type REGISTRY_STATUS
16758       IF p_financial_report_rec.status IS NOT NULL
16759          AND
16760          p_financial_report_rec.status <> fnd_api.g_miss_char
16761          AND
16762          (p_create_update_flag = 'C'
16763           OR
16764           (p_create_update_flag = 'U'
16765            AND
16766            p_financial_report_rec.status <> NVL(l_status, fnd_api.g_miss_char)
16767          )
16768         )
16769       THEN
16770           validate_lookup (
16771               p_column                                => 'status',
16772               p_lookup_type                           => 'REGISTRY_STATUS',
16773               p_column_value                          => p_financial_report_rec.status,
16774               x_return_status                         => x_return_status);
16775 
16776           /*IF g_debug THEN
16777               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16778                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
16779                   'x_return_status = ' || x_return_status, l_debug_prefix);
16780           END IF;
16781           */
16782           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16783                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=> 'status is lookup code in lookup type REGISTRY_STATUS. ' ||
16784                   'x_return_status = ' || x_return_status,
16785                                   p_msg_level=>fnd_log.level_statement);
16786            END IF;
16787 
16788 
16789       END IF;
16790   END IF;
16791 
16792       -- status cannot be set to null during update
16793       IF p_create_update_flag = 'U' THEN
16794           validate_cannot_update_to_null (
16795               p_column                                => 'status',
16796               p_column_value                          => p_financial_report_rec.status,
16797               x_return_status                         => x_return_status);
16798       END IF;
16799 
16800       --------------------------------
16801       --validate actual_content_source
16802       --------------------------------
16803 
16804       -- actual_content_source is mandatory field
16805       IF p_create_update_flag = 'C' THEN
16806           validate_mandatory (
16807               p_create_update_flag                    => p_create_update_flag,
16808               p_column                                => 'actual_content_source',
16809               p_column_value                          => p_financial_report_rec.actual_content_source,
16810               x_return_status                         => x_return_status);
16811 
16812           /*IF g_debug THEN
16813               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16814                   'actual_content_source is mandatory field. ' ||
16815                   'x_return_status = ' || x_return_status, l_debug_prefix);
16816           END IF;
16817           */
16818           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16819                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'actual_content_source is mandatory field. ' ||
16820                         'x_return_status = ' || x_return_status,
16821                                   p_msg_level=>fnd_log.level_statement);
16822           END IF;
16823 
16824 
16825       END IF;
16826 
16827     /* SSM SST Integration and Extension
16828      * actual_content_source is now a foreign key to HZ_ORIG_SYSTEMS_B.orig_system where sst_flag = 'Y'.
16829       -- actual_content_source is lookup code in lookup type CONTENT_SOURCE_TYPE
16830       validate_lookup (
16831           p_column                                => 'actual_content_source',
16832           p_lookup_type                           => 'CONTENT_SOURCE_TYPE',
16833           p_column_value                          => p_financial_report_rec.actual_content_source,
16834           x_return_status                         => x_return_status);
16835     */
16836       /*IF g_debug THEN
16837           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16838               'actual_content_source should be in lookup CONTENT_SOURCE_TYPE. ' ||
16839               'x_return_status = ' || x_return_status, l_debug_prefix);
16840       END IF;
16841       */
16842     /*
16843       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
16844            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16845            p_message=>'actual_content_source should be in lookup CONTENT_SOURCE_TYPE. ' ||
16846                                                 'x_return_status = ' || x_return_status,
16847                                   p_msg_level=>fnd_log.level_statement);
16848       END IF;
16849     */
16850 
16851       HZ_MIXNM_UTILITY.ValidateContentSource (
16852         p_api_version                       => 'V2',
16853         p_create_update_flag                => p_create_update_flag,
16854         p_check_update_privilege            => 'Y',
16855         p_content_source_type               => 'USER_ENTERED',
16856         p_old_content_source_type           => 'USER_ENTERED',
16857         p_actual_content_source             => p_financial_report_rec.actual_content_source,
16858         p_old_actual_content_source         => l_actual_content_source,
16859         p_entity_name                       => 'HZ_FINANCIAL_REPORTS',
16860         x_return_status                     => x_return_status );
16861 
16862       ----------------------------
16863       --validate created_by_module
16864       ----------------------------
16865 
16866       validate_created_by_module(
16867         p_create_update_flag     => p_create_update_flag,
16868         p_created_by_module      => p_financial_report_rec.created_by_module,
16869         p_old_created_by_module  => l_created_by_module,
16870         x_return_status          => x_return_status);
16871 
16872       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
16873         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_financial_report (-)',
16874                                p_msg_level=>fnd_log.level_procedure);
16875       END IF;
16876 
16877   END validate_financial_report;
16878 
16879   /**
16880    * PROCEDURE validate_financial_number
16881    *
16882    * DESCRIPTION
16883    *     Validates financial number record. Checks for
16884    *         uniqueness
16885    *         lookup types
16886    *         mandatory columns
16887    *         non-updateable fields
16888    *         foreign key validations
16889    *         other validations
16890    *
16891    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
16892    *
16893    * ARGUMENTS
16894    *   IN:
16895    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
16896    *     p_financial_number_rec         Financial number record.
16897    *     p_rowid                        Rowid of the record (used only in update mode).
16898    *   IN/OUT:
16899    *     x_return_status                Return status after the call. The status can
16900    *                                    be FND_API.G_RET_STS_SUCCESS (success),
16901    *                                    fnd_api.g_ret_sts_error (error),
16902    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
16903    *
16904    * NOTES
16905    *
16906    * MODIFICATION HISTORY
16907    *
16908    *   29-JAN-2003   Sreedhar Mohan     o Created.
16909    *
16910    */
16911  --bug 3942332: added out parameter x_actual_content_source
16912   PROCEDURE validate_financial_number(
16913       p_create_update_flag                    IN      VARCHAR2,
16914       p_financial_number_rec                  IN      HZ_ORGANIZATION_INFO_V2PUB.FINANCIAL_NUMBER_REC_TYPE,
16915       p_rowid                                 IN      ROWID,
16916       x_return_status                         IN OUT NOCOPY  VARCHAR2,
16917       x_actual_content_source                 OUT NOCOPY VARCHAR2
16918  ) IS
16919 
16920      CURSOR c_dup_financial_number_id (p_financial_report_id IN NUMBER) IS
16921       SELECT 'Y'
16922       FROM   hz_financial_numbers hfr
16923       WHERE  hfr.financial_number_id = financial_number_id;
16924 
16925      CURSOR c_unique_financial_number_rec ( p_financial_report_id IN NUMBER,
16926                                             p_financial_number_name IN VARCHAR2) IS
16927       SELECT 'Y'
16928       FROM   hz_financial_numbers
16929       WHERE  financial_report_id = p_financial_report_id
16930       AND    nvl(financial_number_name, 'XXX') = nvl(p_financial_number_name, 'XXX');
16931 
16932       l_financial_number_id                   hz_financial_numbers.financial_number_id%TYPE;
16933       l_financial_number_name                 hz_financial_numbers.financial_number_name%TYPE;
16934       l_financial_report_id                   hz_financial_numbers.financial_report_id%TYPE;
16935       l_status                                hz_financial_numbers.status%TYPE;
16936       l_created_by_module                     hz_financial_numbers.created_by_module%TYPE;
16937       l_dummy                                 VARCHAR2(1);
16938       l_debug_prefix                          VARCHAR2(30) := '';
16939 
16940   BEGIN
16941 
16942       --enable_debug;
16943 
16944       -- Debug info.
16945       /*IF g_debug THEN
16946           hz_utility_v2pub.debug ('validate_financial_number (+)');
16947       END IF;
16948       */
16949       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
16950         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_financial_number (+)',
16951                                p_msg_level=>fnd_log.level_procedure);
16952       END IF;
16953 
16954       -- do the query to get old values for update
16955       IF p_create_update_flag = 'U'
16956       THEN
16957           SELECT FINANCIAL_NUMBER_ID,
16958                  FINANCIAL_REPORT_ID,
16959                  FINANCIAL_NUMBER_NAME,
16960                  STATUS,
16961                  CREATED_BY_MODULE
16962           INTO   l_financial_number_id,
16963                  l_financial_report_id,
16964                  l_financial_number_name,
16965                  l_status,
16966                  l_created_by_module
16967           FROM   HZ_FINANCIAL_NUMBERS
16968           WHERE  ROWID = p_rowid;
16969       END IF;
16970 
16971       -------------------------------------
16972       -- validation for financial_number_id
16973       -------------------------------------
16974 /****Logical APIs - validation not required****/
16975   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
16976       --check for unique financial_number_id
16977       IF p_create_update_flag = 'C' THEN
16978         IF p_financial_number_rec.financial_number_id IS NOT NULL AND
16979            p_financial_number_rec.financial_number_id <> fnd_api.g_miss_num
16980         THEN
16981           OPEN c_dup_financial_number_id (p_financial_number_rec.financial_number_id);
16982           FETCH c_dup_financial_number_id INTO l_dummy;
16983 
16984           -- key is not unique, push an error onto the stack.
16985           IF NVL(c_dup_financial_number_id%FOUND, FALSE) THEN
16986             fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
16987             fnd_message.set_token('COLUMN', 'financial_number_id');
16988             fnd_msg_pub.add;
16989             x_return_status := fnd_api.g_ret_sts_error;
16990           END IF;
16991           CLOSE c_dup_financial_number_id;
16992 
16993           /*IF g_debug THEN
16994             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
16995               'check that financial_number_id is unique during creation. ' ||
16996               ' x_return_status = ' || x_return_status, l_debug_prefix);
16997           END IF;
16998           */
16999           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17000            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'check that financial_number_id is unique during creation. ' ||
17001                                         ' x_return_status = ' || x_return_status,
17002                                   p_msg_level=>fnd_log.level_statement);
17003          END IF;
17004 
17005         END IF;
17006       END IF;
17007 
17008       /*IF g_debug THEN
17009         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17010           '(+) after validate financial_number_id ... ' ||
17011           'x_return_status = ' || x_return_status, l_debug_prefix);
17012       END IF;
17013       */
17014       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17015            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate financial_number_id ... ' ||
17016           'x_return_status = ' || x_return_status,
17017                                   p_msg_level=>fnd_log.level_statement);
17018     END IF;
17019 
17020       -- financial_number_id is non-updateable field
17021       IF p_create_update_flag = 'U' THEN
17022           validate_nonupdateable (
17023               p_column                                => 'financial_number_id',
17024               p_column_value                          => p_financial_number_rec.financial_number_id,
17025               p_old_column_value                      => l_financial_number_id,
17026               x_return_status                         => x_return_status);
17027 
17028           /*IF g_debug THEN
17029               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17030                   'financial_number_id is non-updateable field. ' ||
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=>'financial_number_id is non-updateable field. ' ||
17036                         'x_return_status = ' || x_return_status,
17037                                   p_msg_level=>fnd_log.level_statement);
17038           END IF;
17039 
17040       END IF;
17041   END IF;
17042 
17043       -------------------------------------
17044       -- validation for financial_report_id
17045       -------------------------------------
17046 /****Logical APIs - validation not required****/
17047   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
17048       --Must exist in HZ_FINANCIAL_REPORTS.  Non-updateable.
17049       -- financial_report_id has foreign key HZ_FINANCIAL_REPORTS.FINANCIAL_REPORT_ID
17050       IF p_create_update_flag = 'C'
17051          AND
17052          p_financial_number_rec.financial_report_id IS NOT NULL
17053          AND
17054          p_financial_number_rec.financial_report_id <> fnd_api.g_miss_num
17055       THEN
17056           BEGIN
17057               --bug 3942332: selected actual_content_source from the hz_financial_reports record.
17058               --SELECT 'Y'
17059               --INTO l_dummy
17060               SELECT actual_content_source
17061               INTO   x_actual_content_source
17062               FROM   hz_financial_reports hfr
17063               WHERE  hfr.financial_report_id = p_financial_number_rec.financial_report_id;
17064 
17065           EXCEPTION
17066               WHEN NO_DATA_FOUND THEN
17067                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
17068                   fnd_message.set_token('FK', 'financial_report_id');
17069                   fnd_message.set_token('COLUMN', 'financial_report_id');
17070                   fnd_message.set_token('TABLE', 'hz_financial_reports');
17071                   fnd_msg_pub.add;
17072                   x_return_status := fnd_api.g_ret_sts_error;
17073           END;
17074 
17075           /*IF g_debug THEN
17076               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17077                   'financial_report_id has foreign key hz_financial_reports.financial_report_id. ' ||
17078                   'x_return_status = ' || x_return_status, l_debug_prefix);
17079           END IF;
17080           */
17081           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17082             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17083             p_message=>'financial_report_id has foreign key hz_financial_reports.financial_report_id. ' ||
17084                          'x_return_status = ' || x_return_status,
17085                                   p_msg_level=>fnd_log.level_statement);
17086           END IF;
17087 
17088       END IF;
17089 
17090       -- financial_report_id is non-updateable field
17091       IF p_create_update_flag = 'U' THEN
17092           validate_nonupdateable (
17093               p_column                                => 'financial_report_id',
17094               p_column_value                          => p_financial_number_rec.financial_report_id,
17095               p_old_column_value                      => l_financial_report_id,
17096               x_return_status                         => x_return_status);
17097 
17098           /*IF g_debug THEN
17099               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17100                   'financial_report_id is non-updateable field. ' ||
17101                   'x_return_status = ' || x_return_status, l_debug_prefix);
17102           END IF;
17103           */
17104           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17105              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'financial_report_id is non-updateable field. ' ||
17106                         'x_return_status = ' || x_return_status,
17107                                   p_msg_level=>fnd_log.level_statement);
17108           END IF;
17109 
17110       END IF;
17111 
17112       -- financial_report_id is mandatory field
17113       IF p_create_update_flag = 'C' THEN
17114           validate_mandatory (
17115               p_create_update_flag                    => p_create_update_flag,
17116               p_column                                => 'financial_report_id',
17117               p_column_value                          => p_financial_number_rec.financial_report_id,
17118               x_return_status                         => x_return_status);
17119 
17120           /*IF g_debug THEN
17121               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17122                   'financial_report_id is mandatory field. ' ||
17123                   'x_return_status = ' || x_return_status, l_debug_prefix);
17124           END IF;
17125           */
17126           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17127              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'financial_report_id is mandatory field. ' ||
17128                         'x_return_status = ' || x_return_status,
17129                                   p_msg_level=>fnd_log.level_statement);
17130           END IF;
17131 
17132       END IF;
17133   END IF;
17134 
17135       ---------------------------------------
17136       --Bug 2869162: Unique record Validation
17137       ---------------------------------------
17138       IF p_create_update_flag = 'C' THEN
17139          OPEN c_unique_financial_number_rec ( p_financial_number_rec.financial_report_id,
17140                                               p_financial_number_rec.financial_number_name);
17141 
17142           FETCH c_unique_financial_number_rec INTO l_dummy;
17143 
17144           -- combination key is not unique, push an error onto the stack.
17145           IF NVL(c_unique_financial_number_rec%FOUND, FALSE) THEN
17146             fnd_message.set_name('AR', 'HZ_API_DUP_FIN_NUMBER_REC');
17147             fnd_msg_pub.add;
17148             x_return_status := fnd_api.g_ret_sts_error;
17149           END IF;
17150           CLOSE c_unique_financial_number_rec;
17151 
17152           /*IF g_debug THEN
17153             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17154               'The following column combination should be unique:' ||
17155               ' FINANCIAL_REPORT_ID, FINANCIAL_NUMBER_NAME. ' ||
17156               ' x_return_status = ' || x_return_status, l_debug_prefix);
17157           END IF;
17158           */
17159           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17160            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'The following column combination should be unique:' ||
17161                                       ' FINANCIAL_REPORT_ID, FINANCIAL_NUMBER_NAME. ' ||
17162                                       ' x_return_status = ' || x_return_status,
17163                                   p_msg_level=>fnd_log.level_statement);
17164           END IF;
17165       END IF;
17166       -----------------------------------------
17167       --financial_number_name in non-updateable
17168       -----------------------------------------
17169       IF p_create_update_flag = 'U' THEN
17170           validate_nonupdateable (
17171               p_column                                => 'financial_number_name',
17172               p_column_value                          => p_financial_number_rec.financial_number_name,
17173               p_old_column_value                      => l_financial_number_name,
17174               x_return_status                         => x_return_status);
17175 
17176           /*IF g_debug THEN
17177               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17178                   'financial_number_name is non-updateable field. ' ||
17179                   'x_return_status = ' || x_return_status, l_debug_prefix);
17180           END IF;
17181           */
17182           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17183                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17184                  p_message=>'financial_number_name is non-updateable field. ' ||
17185                   'x_return_status = ' || x_return_status,
17186                                   p_msg_level=>fnd_log.level_statement);
17187           END IF;
17188 
17189       END IF;
17190       ---------------------------------------
17191       -- validation for financial_number_name
17192       ---------------------------------------
17193 
17194       -- financial_number_name is lookup code in lookup type FIN_NUM_NAME
17195       validate_lookup (
17196           p_column                                => 'financial_number_name',
17197           p_lookup_type                           => 'FIN_NUM_NAME',
17198           p_column_value                          => p_financial_number_rec.financial_number_name,
17199           x_return_status                         => x_return_status);
17200 
17201       /*IF g_debug THEN
17202           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17203               'financial_number_name should be in lookup YES/NO. ' ||
17204               'x_return_status = ' || x_return_status, l_debug_prefix);
17205       END IF;
17206       */
17207       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17208            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17209            p_message=>'financial_number_name should be in lookup YES/NO. ' ||
17210                    'x_return_status = ' || x_return_status,
17211                                   p_msg_level=>fnd_log.level_statement);
17212     END IF;
17213 
17214       ------------------------
17215       -- validation for status
17216       ------------------------
17217 /****Logical APIs - validation not required****/
17218   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
17219       -- status is lookup code in lookup type REGISTRY_STATUS
17220       IF p_financial_number_rec.status IS NOT NULL
17221          AND
17222          p_financial_number_rec.status <> fnd_api.g_miss_char
17223          AND
17224          (p_create_update_flag = 'C'
17225           OR
17226           (p_create_update_flag = 'U'
17227            AND
17228            p_financial_number_rec.status <> NVL(l_status, fnd_api.g_miss_char)
17229          )
17230         )
17231       THEN
17232           validate_lookup (
17233               p_column                                => 'status',
17234               p_lookup_type                           => 'REGISTRY_STATUS',
17235               p_column_value                          => p_financial_number_rec.status,
17236               x_return_status                         => x_return_status);
17237 
17238           /*IF g_debug THEN
17239               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17240                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
17241                   'x_return_status = ' || x_return_status, l_debug_prefix);
17242           END IF;
17243           */
17244           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17245                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17246                 p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
17247                         'x_return_status = ' || x_return_status,
17248                                   p_msg_level=>fnd_log.level_statement);
17249           END IF;
17250 
17251       END IF;
17252   END IF;
17253 
17254       -- status cannot be set to null during update
17255       IF p_create_update_flag = 'U' THEN
17256           validate_cannot_update_to_null (
17257               p_column                                => 'status',
17258               p_column_value                          => p_financial_number_rec.status,
17259               x_return_status                         => x_return_status);
17260       END IF;
17261 
17262       --------------------------------------
17263       -- validate created_by_module
17264       --------------------------------------
17265 
17266       validate_created_by_module(
17267         p_create_update_flag     => p_create_update_flag,
17268         p_created_by_module      => p_financial_number_rec.created_by_module,
17269         p_old_created_by_module  => l_created_by_module,
17270         x_return_status          => x_return_status);
17271 
17272       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
17273         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_financial_number (-)',
17274                                p_msg_level=>fnd_log.level_procedure);
17275       END IF;
17276 
17277   END validate_financial_number;
17278 
17279   /**
17280    * PROCEDURE validate_credit_rating
17281    *
17282    * DESCRIPTION
17283    *     Validates credit rating record. Checks for
17284    *         uniqueness
17285    *         lookup types
17286    *         mandatory columns
17287    *         non-updateable fields
17288    *         foreign key validations
17289    *         other validations
17290    *
17291    * EXTERNAL PROCEDURES/FUNCTIONS ACCESSED
17292    *
17293    * ARGUMENTS
17294    *   IN:
17295    *     p_create_update_flag           Create update flag. 'C' = create. 'U' = update.
17296    *     p_credit_rating_rec            Credit rating record.
17297    *     p_rowid                        Rowid of the record (used only in update mode).
17298    *   IN/OUT:
17299    *     x_return_status                Return status after the call. The status can
17300    *                                    be FND_API.G_RET_STS_SUCCESS (success),
17301    *                                    fnd_api.g_ret_sts_error (error),
17302    *                                    FND_API.G_RET_STS_UNEXP_ERROR (unexpected error).
17303    *
17304    * NOTES
17305    *
17306    * MODIFICATION HISTORY
17307    *
17308    *   01-27-2003    Sreedhar Mohan     o Created.
17309    *   03-11-2003    Sreedhar Mohan     Changed the lookup_type to FAILURE_SCORE_OVERRIDE_CODE
17310    *                                    instead of FAILURE_SCORE_OVERRIDE_SCORE
17311    *                                    for the code credit_score_override_code
17312    *   03-14-2003    Sreedhar Mohan     Bug 2843453, modified such that, fincl_embt_ind should
17313    *                                    be validated against YES/NO instead of REGISTRY_STATUS
17314    *   10-09-2003    Rajib R Borah    o Bug 3090928.Commented the code to check for uniqueness of
17315    *                                    party_id,rated_as_of_date,rating_organization. This is now
17316    *                                    handled by the unique index HZ_CREDIT_RATINGS_U2.
17317    *   04-05-2004    Rajib R Borah    o Bug 3181460. Credit_score_natl_percentile and
17318    *                                    failure_score_natnl_percentile should have a value
17319    *                                    within 0 to 100 only.
17320    *                                  o Added local variables l_credit_score_natl_percentile and
17321    *                                    l_fail_score_natnl_percentile for the same.
17322    *   01-03-2005  Rajib Ranjan Borah   o SSM SST Integration and Extension.
17323    *                                      Actual_content_source will now be validated against
17324    *                                      HZ_ORIG_SYSTEMS_B by calling Hz_MIXNM_UTILITY.ValidateContentSource
17325    *                                      instead of being validated against lookup CONTENT_SOURCE_TYPE.
17326    *   01-24-2005    Kalyan           o Bug 3877782. Added the condition to consider 'start_date_active' and
17327    *                                    'end_date_active'.
17328    */
17329 
17330   PROCEDURE validate_credit_rating(
17331       p_create_update_flag                    IN      VARCHAR2,
17332       p_credit_rating_rec                     IN      HZ_PARTY_INFO_V2PUB.CREDIT_RATING_REC_TYPE,
17333       p_rowid                                 IN      ROWID,
17334       x_return_status                         IN OUT NOCOPY  VARCHAR2
17335  ) IS
17336 
17337      CURSOR c_dup_credit_rating_id (p_credting_rating_id IN NUMBER) IS
17338       SELECT 'Y'
17339       FROM   hz_credit_ratings hcr
17340       WHERE  hcr.credit_rating_id = p_credting_rating_id;
17341 
17342      CURSOR c_unique_credit_rating_rec ( p_party_id IN NUMBER,
17343                                          p_rated_as_of_date IN DATE,
17344                                          p_rating_organization IN VARCHAR2,
17345                                          p_actual_content_source IN VARCHAR2) IS
17346       SELECT 'Y'
17347       FROM   hz_credit_ratings hc
17348       WHERE  hc.party_id = p_party_id
17349       AND    trunc(nvl(hc.rated_as_of_date, to_date('12/31/4712','MM/DD/YYYY'))) =
17350              trunc(nvl(p_rated_as_of_date, to_date('12/31/4712','MM/DD/YYYY')))
17351       AND    nvl(hc.rating_organization, 'XXX') = nvl(p_rating_organization, 'XXX')
17352       AND    nvl(hc.actual_content_source, hz_party_v2pub.G_MISS_CONTENT_SOURCE_TYPE) =
17353              nvl(p_actual_content_source, hz_party_v2pub.G_MISS_CONTENT_SOURCE_TYPE);
17354 
17355       l_credit_rating_id                      hz_credit_ratings.credit_rating_id%TYPE;
17356       l_party_id                              hz_credit_ratings.party_id%TYPE;
17357       l_rating_organization                   hz_credit_ratings.rating_organization%TYPE;
17358       l_rated_as_of_date                      hz_credit_ratings.rated_as_of_date%TYPE;
17359       l_fincl_embt_ind                        hz_credit_ratings.fincl_embt_ind%TYPE;
17360       l_credit_score_commentary               hz_credit_ratings.credit_score_commentary%TYPE;
17361       l_credit_score_commentary2              hz_credit_ratings.credit_score_commentary2%TYPE;
17362       l_credit_score_commentary3              hz_credit_ratings.credit_score_commentary3%TYPE;
17363       l_credit_score_commentary4              hz_credit_ratings.credit_score_commentary4%TYPE;
17364       l_credit_score_commentary5              hz_credit_ratings.credit_score_commentary5%TYPE;
17365       l_credit_score_commentary6              hz_credit_ratings.credit_score_commentary6%TYPE;
17366       l_credit_score_commentary7              hz_credit_ratings.credit_score_commentary7%TYPE;
17367       l_credit_score_commentary8              hz_credit_ratings.credit_score_commentary8%TYPE;
17368       l_credit_score_commentary9              hz_credit_ratings.credit_score_commentary9%TYPE;
17369       l_credit_score_commentary10             hz_credit_ratings.credit_score_commentary10%TYPE;
17370       l_failure_score_commentary              hz_credit_ratings.failure_score_commentary%TYPE;
17371       l_failure_score_commentary2             hz_credit_ratings.failure_score_commentary2%TYPE;
17372       l_failure_score_commentary3             hz_credit_ratings.failure_score_commentary3%TYPE;
17373       l_failure_score_commentary4             hz_credit_ratings.failure_score_commentary4%TYPE;
17374       l_failure_score_commentary5             hz_credit_ratings.failure_score_commentary5%TYPE;
17375       l_failure_score_commentary6             hz_credit_ratings.failure_score_commentary6%TYPE;
17376       l_failure_score_commentary7             hz_credit_ratings.failure_score_commentary7%TYPE;
17377       l_failure_score_commentary8             hz_credit_ratings.failure_score_commentary8%TYPE;
17378       l_failure_score_commentary9             hz_credit_ratings.failure_score_commentary9%TYPE;
17379       l_failure_score_commentary10            hz_credit_ratings.failure_score_commentary10%TYPE;
17380       l_status                                hz_credit_ratings.status%TYPE;
17381       l_created_by_module                     hz_credit_ratings.created_by_module%TYPE;
17382       l_debarment_ind                         hz_credit_ratings.debarment_ind%TYPE;
17383       l_maximum_credit_currency_code          hz_credit_ratings.maximum_credit_currency_code%TYPE;
17384       l_credit_score_override_code            hz_credit_ratings.credit_score_override_code%TYPE;
17385       l_suit_ind                              hz_credit_ratings.suit_ind%TYPE;
17386       l_lien_ind                              hz_credit_ratings.lien_ind%TYPE;
17387       l_judgement_ind                         hz_credit_ratings.judgement_ind%TYPE;
17388       l_bankruptcy_ind                        hz_credit_ratings.bankruptcy_ind%TYPE;
17389       l_no_trade_ind                          hz_credit_ratings.no_trade_ind%TYPE;
17390       l_prnt_hq_bkcy_ind                      hz_credit_ratings.prnt_hq_bkcy_ind%TYPE;
17391       l_actual_content_source                 hz_credit_ratings.actual_content_source%TYPE;
17392       l_credit_score_natl_percentile          hz_credit_ratings.credit_score_natl_percentile%TYPE;
17393       l_fail_score_natnl_percentile           hz_credit_ratings.failure_score_natnl_percentile%TYPE;
17394       l_dummy                                 VARCHAR2(1);
17395       l_debug_prefix                          VARCHAR2(30) := '';
17396 
17397   BEGIN
17398 
17399       --enable_debug;
17400 
17401       -- Debug info.
17402       /*IF g_debug THEN
17403           hz_utility_v2pub.debug ('validate_credit_rating (+)');
17404       END IF;
17405       */
17406       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
17407         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_credit_rating (+)',
17408                                p_msg_level=>fnd_log.level_procedure);
17409        END IF;
17410 
17411       -- do the query to get old values for update
17412       IF p_create_update_flag = 'U'
17413       THEN
17414           SELECT   CREDIT_RATING_ID,
17415                    PARTY_ID,
17416                    RATING_ORGANIZATION,
17417                    RATED_AS_OF_DATE,
17418                    FINCL_EMBT_IND,
17419                    CREDIT_SCORE_COMMENTARY,
17420                    CREDIT_SCORE_COMMENTARY2,
17421                    CREDIT_SCORE_COMMENTARY3,
17422                    CREDIT_SCORE_COMMENTARY4,
17423                    CREDIT_SCORE_COMMENTARY5,
17424                    CREDIT_SCORE_COMMENTARY6,
17425                    CREDIT_SCORE_COMMENTARY7,
17426                    CREDIT_SCORE_COMMENTARY8,
17427                    CREDIT_SCORE_COMMENTARY9,
17428                    CREDIT_SCORE_COMMENTARY10,
17429                    FAILURE_SCORE_COMMENTARY,
17430                    FAILURE_SCORE_COMMENTARY2,
17431                    FAILURE_SCORE_COMMENTARY3,
17432                    FAILURE_SCORE_COMMENTARY4,
17433                    FAILURE_SCORE_COMMENTARY5,
17434                    FAILURE_SCORE_COMMENTARY6,
17435                    FAILURE_SCORE_COMMENTARY7,
17436                    FAILURE_SCORE_COMMENTARY8,
17437                    FAILURE_SCORE_COMMENTARY9,
17438                    FAILURE_SCORE_COMMENTARY10,
17439                    DEBARMENT_IND,
17440                    MAXIMUM_CREDIT_CURRENCY_CODE,
17441                    CREDIT_SCORE_OVERRIDE_CODE,
17442                    SUIT_IND,
17443                    LIEN_IND,
17444                    JUDGEMENT_IND,
17445                    BANKRUPTCY_IND,
17446                    NO_TRADE_IND,
17447                    PRNT_HQ_BKCY_IND,
17448                    ACTUAL_CONTENT_SOURCE,
17449                    STATUS,
17450                    CREATED_BY_MODULE,
17451                    CREDIT_SCORE_NATL_PERCENTILE,
17452                    FAILURE_SCORE_NATNL_PERCENTILE
17453           INTO     l_credit_rating_id,
17454                    l_party_id,
17455                    l_rating_organization,
17456                    l_rated_as_of_date,
17457                    l_fincl_embt_ind,
17458                    l_credit_score_commentary,
17459                    l_credit_score_commentary2,
17460                    l_credit_score_commentary3,
17461                    l_credit_score_commentary4,
17462                    l_credit_score_commentary5,
17463                    l_credit_score_commentary6,
17464                    l_credit_score_commentary7,
17465                    l_credit_score_commentary8,
17466                    l_credit_score_commentary9,
17467                    l_credit_score_commentary10,
17468                    l_failure_score_commentary,
17469                    l_failure_score_commentary2,
17470                    l_failure_score_commentary3,
17471                    l_failure_score_commentary4,
17472                    l_failure_score_commentary5,
17473                    l_failure_score_commentary6,
17474                    l_failure_score_commentary7,
17475                    l_failure_score_commentary8,
17476                    l_failure_score_commentary9,
17477                    l_failure_score_commentary10,
17478                    l_debarment_ind,
17479                    l_maximum_credit_currency_code,
17480                    l_credit_score_override_code,
17481                    l_suit_ind,
17482                    l_lien_ind,
17483                    l_judgement_ind,
17484                    l_bankruptcy_ind,
17485                    l_no_trade_ind,
17486                    l_prnt_hq_bkcy_ind,
17487                    l_actual_content_source,
17488                    l_status,
17489                    l_created_by_module,
17490                    l_credit_score_natl_percentile,
17491                    l_fail_score_natnl_percentile
17492           FROM   HZ_CREDIT_RATINGS
17493           WHERE  ROWID = p_rowid;
17494       END IF;
17495 
17496       -------------------------------------
17497       -- validation for credit_rating_id
17498       -------------------------------------
17499 /****Logical APIs - validation not required****/
17500   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
17501       --check for unique credit_rating_id
17502       IF p_create_update_flag = 'C' THEN
17503         IF p_credit_rating_rec.credit_rating_id IS NOT NULL AND
17504            p_credit_rating_rec.credit_rating_id <> fnd_api.g_miss_num
17505         THEN
17506           OPEN c_dup_credit_rating_id (p_credit_rating_rec.credit_rating_id);
17507           FETCH c_dup_credit_rating_id INTO l_dummy;
17508 
17509           -- key is not unique, push an error onto the stack.
17510           IF NVL(c_dup_credit_rating_id%FOUND, FALSE) THEN
17511             fnd_message.set_name('AR', 'HZ_API_DUPLICATE_COLUMN');
17512             fnd_message.set_token('COLUMN', 'credit_rating_id');
17513             fnd_msg_pub.add;
17514             x_return_status := fnd_api.g_ret_sts_error;
17515           END IF;
17516           CLOSE c_dup_credit_rating_id;
17517 
17518           /*IF g_debug THEN
17519             hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17520               'check that credit_rating_id is unique during creation. ' ||
17521               ' x_return_status = ' || x_return_status, l_debug_prefix);
17522           END IF;
17523           */
17524           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17525            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17526            p_message=>'check that credit_rating_id is unique during creation. ' ||
17527                                 ' x_return_status = ' || x_return_status,
17528                                   p_msg_level=>fnd_log.level_statement);
17529            END IF;
17530 
17531         END IF;
17532       END IF;
17533 
17534       /*IF g_debug THEN
17535         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17536           '(+) after validate credit_rating_id ... ' ||
17537           'x_return_status = ' || x_return_status, l_debug_prefix);
17538       END IF;
17539       */
17540       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17541            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'(+) after validate credit_rating_id ... ' ||
17542                                                 'x_return_status = ' || x_return_status,
17543                                   p_msg_level=>fnd_log.level_statement);
17544       END IF;
17545 
17546       -- credit_rating_id is non-updateable field
17547       IF p_create_update_flag = 'U' THEN
17548           validate_nonupdateable (
17549               p_column                                => 'credit_rating_id',
17550               p_column_value                          => p_credit_rating_rec.credit_rating_id,
17551               p_old_column_value                      => l_credit_rating_id,
17552               x_return_status                         => x_return_status);
17553 
17554           /*IF g_debug THEN
17555               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17556                   'credit_rating_id is non-updateable field. ' ||
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=>'credit_rating_id is non-updateable field. ' ||
17562                          'x_return_status = ' || x_return_status,
17563                                   p_msg_level=>fnd_log.level_statement);
17564          END IF;
17565 
17566       END IF;
17567   END IF;
17568 
17569       -------------------------------------
17570       -- validation for party_id
17571       -------------------------------------
17572 /****Logical APIs - validation not required****/
17573   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
17574       --party_id is a mandatory field
17575       IF p_create_update_flag = 'C' THEN
17576           validate_mandatory (
17577               p_create_update_flag                    => p_create_update_flag,
17578               p_column                                => 'party_id',
17579               p_column_value                          => p_credit_rating_rec.party_id,
17580               x_return_status                         => x_return_status);
17581 
17582           /*IF g_debug THEN
17583               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17584                   'party_id is mandatory field. ' ||
17585                   'x_return_status = ' || x_return_status, l_debug_prefix);
17586           END IF;
17587           */
17588           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17589                  hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is mandatory field. ' ||
17590                                                 'x_return_status = ' || x_return_status,
17591                                   p_msg_level=>fnd_log.level_statement);
17592            END IF;
17593 
17594       END IF;
17595       -- party_id has foreign key HZ_PARTIES.PARTY_ID
17596       IF p_create_update_flag = 'C'
17597          AND
17598          p_credit_rating_rec.party_id IS NOT NULL
17599          AND
17600          p_credit_rating_rec.party_id <> fnd_api.g_miss_num
17601       THEN
17602           BEGIN
17603               SELECT 'Y'
17604               INTO   l_dummy
17605               FROM   hz_parties p
17606               WHERE  p.party_id = p_credit_rating_rec.party_id;
17607 
17608           EXCEPTION
17609               WHEN NO_DATA_FOUND THEN
17610                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
17611                   fnd_message.set_token('FK', 'party_id');
17612                   fnd_message.set_token('COLUMN', 'party_id');
17613                   fnd_message.set_token('TABLE', 'hz_parties');
17614                   fnd_msg_pub.add;
17615                   x_return_status := fnd_api.g_ret_sts_error;
17616           END;
17617 
17618           /*IF g_debug THEN
17619               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17620                   'party_id has foreign key hz_parties.party_id. ' ||
17621                   'x_return_status = ' || x_return_status, l_debug_prefix);
17622           END IF;
17623           */
17624           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17625              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id has foreign key hz_parties.party_id. ' ||
17626                                  'x_return_status = ' || x_return_status,
17627                                   p_msg_level=>fnd_log.level_statement);
17628           END IF;
17629 
17630       END IF;
17631 
17632       -- party_id is non-updateable field
17633       IF p_create_update_flag = 'U' THEN
17634           validate_nonupdateable (
17635               p_column                                => 'party_id',
17636               p_column_value                          => p_credit_rating_rec.party_id,
17637               p_old_column_value                      => l_party_id,
17638               x_return_status                         => x_return_status);
17639 
17640           /*IF g_debug THEN
17641               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17642                   'party_id is non-updateable field. ' ||
17643                   'x_return_status = ' || x_return_status, l_debug_prefix);
17644           END IF;
17645           */
17646           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17647                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'party_id is non-updateable field. ' ||
17648                                                 'x_return_status = ' || x_return_status,
17649                                   p_msg_level=>fnd_log.level_statement);
17650            END IF;
17651 
17652       END IF;
17653   END IF;
17654 
17655       /**********************************************************************************
17656       Bug Number 3090928:Removed the validation below and used the unique index HZ_CREDIT_RATINGS_U2
17657       on table HZ_CREDIT_RATINGS to check for uniqueness.Now this check is done by handling the
17658       exception DUP_VAL_ON_INDEX for the unique index HZ_CREDIT_RATINGS_U2 in the procedure
17659       HZ_CREDIT_RATINGS_PKG.Insert_Row.
17660       ***********************************************************************************
17661       |---------------------------------------
17662       |--Bug 2869178: Unique record Validation
17663       |---------------------------------------
17664       |IF p_create_update_flag = 'C' THEN
17665       |    OPEN c_unique_credit_rating_rec (p_credit_rating_rec.party_id,
17666       |                                     p_credit_rating_rec.rated_as_of_date,
17667       |                                     p_credit_rating_rec.rating_organization,
17668       |                                     p_credit_rating_rec.actual_content_source);
17669       |    FETCH c_unique_credit_rating_rec INTO l_dummy;
17670       |
17671       |    -- combination key is not unique, push an error onto the stack.
17672       |    IF NVL(c_unique_credit_rating_rec%FOUND, FALSE) THEN
17673       |      fnd_message.set_name('AR', 'HZ_API_DUP_CREDIT_RATING_REC');
17674       |      fnd_msg_pub.add;
17675       |      x_return_status := fnd_api.g_ret_sts_error;
17676       |    END IF;
17677       |    CLOSE c_unique_credit_rating_rec;
17678       |
17679       |    IF g_debug THEN
17680       |      hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17681       |        'The following column combination should be unique:' ||
17682       |        ' PARTY_ID, TRUNC(RATED_AS_OF_DATE), RATING_ORGANIZATION, and ACTUAL_CONTENT_SOURCE. ' ||
17683       |        ' x_return_status = ' || x_return_status, l_debug_prefix);
17684       |    END IF;
17685       |END IF;
17686       ********************************************************************************
17687       End of code commented for Bug Number 3090928.
17688       ********************************************************************************/
17689       ------------------------------------
17690       --rated_as_of_date is not updateable
17691       ------------------------------------
17692       IF p_create_update_flag = 'U' THEN
17693           validate_nonupdateable (
17694               p_column                                => 'rated_as_of_date',
17695               p_column_value                          => trunc(p_credit_rating_rec.rated_as_of_date),
17696               p_old_column_value                      => trunc(l_rated_as_of_date),
17697               x_return_status                         => x_return_status);
17698 
17699           /*IF g_debug THEN
17700               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17701                   'rated_as_of_date is non-updateable field. ' ||
17702                   'x_return_status = ' || x_return_status, l_debug_prefix);
17703           END IF;
17704           */
17705           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17706            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'rated_as_of_date is non-updateable field. ' ||
17707                   'x_return_status = ' || x_return_status,
17708                                   p_msg_level=>fnd_log.level_statement);
17709            END IF;
17710 
17711       END IF;
17712       ---------------------------------------
17713       --rating_organization is not updateable
17714       ---------------------------------------
17715       IF p_create_update_flag = 'U' THEN
17716           validate_nonupdateable (
17717               p_column                                => 'rating_organization',
17718               p_column_value                          => p_credit_rating_rec.rating_organization,
17719               p_old_column_value                      => l_rating_organization,
17720               x_return_status                         => x_return_status);
17721 
17722           /*IF g_debug THEN
17723               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17724                   'rating_organization is non-updateable field. ' ||
17725                   'x_return_status = ' || x_return_status, l_debug_prefix);
17726           END IF;
17727           */
17728           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17729            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'rating_organization is non-updateable field. ' ||
17730                                          'x_return_status = ' || x_return_status,
17731                                   p_msg_level=>fnd_log.level_statement);
17732           END IF;
17733 
17734       END IF;
17735       ----------------------------------
17736       -- validation for fincl_embt_ind
17737       ----------------------------------
17738 /****Logical APIs - validation not required****/
17739   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
17740       --bug 2843453, fincl_embt_ind should be validated against YES/NO instead
17741       --of REGISTRY_STATUS
17742       -- fincl_embt_ind is lookup code in lookup type YES/NO
17743       validate_lookup (
17744           p_column                                => 'fincl_embt_ind',
17745           p_lookup_type                           => 'YES/NO',
17746           p_column_value                          => p_credit_rating_rec.fincl_embt_ind,
17747           x_return_status                         => x_return_status);
17748 
17749       /*IF g_debug THEN
17750           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17751               'fincl_embt_ind should be in lookup YES/NO. ' ||
17752               'x_return_status = ' || x_return_status, l_debug_prefix);
17753       END IF;
17754       */
17755       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17756            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'fincl_embt_ind should be in lookup YES/NO. ' ||
17757               'x_return_status = ' || x_return_status,
17758                                   p_msg_level=>fnd_log.level_statement);
17759     END IF;
17760   END IF;
17761 
17762       -----------------------------------------
17763       -- validation for credit_score_commentary
17764       -----------------------------------------
17765 
17766       -- credit_score_commentary is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17767       validate_lookup (
17768           p_column                                => 'credit_score_commentary',
17769           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17770           p_column_value                          => p_credit_rating_rec.credit_score_commentary,
17771           x_return_status                         => x_return_status);
17772 
17773       /*IF g_debug THEN
17774           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17775               'credit_score_commentary should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17776               'x_return_status = ' || x_return_status, l_debug_prefix);
17777       END IF;
17778       */
17779         IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17780            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17781            p_message=>'credit_score_commentary should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17782               'x_return_status = ' || x_return_status,
17783                                   p_msg_level=>fnd_log.level_statement);
17784        END IF;
17785 
17786 
17787       ------------------------------------------
17788       -- validation for credit_score_commentary2
17789       ------------------------------------------
17790 
17791       -- credit_score_commentary2 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17792       validate_lookup (
17793           p_column                                => 'credit_score_commentary2',
17794           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17795           p_column_value                          => p_credit_rating_rec.credit_score_commentary2,
17796           x_return_status                         => x_return_status);
17797 
17798       /*IF g_debug THEN
17799           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17800               'credit_score_commentary2 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17801               'x_return_status = ' || x_return_status, l_debug_prefix);
17802       END IF;
17803       */
17804       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17805            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'credit_score_commentary2 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17806               'x_return_status = ' || x_return_status,
17807                                   p_msg_level=>fnd_log.level_statement);
17808       END IF;
17809 
17810       ------------------------------------------
17811       -- validation for credit_score_commentary3
17812       ------------------------------------------
17813 
17814       -- credit_score_commentary3 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17815       validate_lookup (
17816           p_column                                => 'credit_score_commentary3',
17817           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17818           p_column_value                          => p_credit_rating_rec.credit_score_commentary3,
17819           x_return_status                         => x_return_status);
17820 
17821       /*IF g_debug THEN
17822           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17823               'credit_score_commentary3 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17824               'x_return_status = ' || x_return_status, l_debug_prefix);
17825       END IF;
17826       */
17827       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17828            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'credit_score_commentary3 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17829               'x_return_status = ' || x_return_status,
17830                                   p_msg_level=>fnd_log.level_statement);
17831       END IF;
17832 
17833       ------------------------------------------
17834       -- validation for credit_score_commentary4
17835       ------------------------------------------
17836 
17837       -- credit_score_commentary4 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17838       validate_lookup (
17839           p_column                                => 'credit_score_commentary4',
17840           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17841           p_column_value                          => p_credit_rating_rec.credit_score_commentary4,
17842           x_return_status                         => x_return_status);
17843 
17844       /*IF g_debug THEN
17845           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17846               'credit_score_commentary4 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17847               'x_return_status = ' || x_return_status, l_debug_prefix);
17848       END IF;
17849       */
17850       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17851            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'credit_score_commentary4 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17852               'x_return_status = ' || x_return_status,
17853                                   p_msg_level=>fnd_log.level_statement);
17854     END IF;
17855 
17856       ------------------------------------------
17857       -- validation for credit_score_commentary5
17858       ------------------------------------------
17859 
17860       -- credit_score_commentary5 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17861       validate_lookup (
17862           p_column                                => 'credit_score_commentary5',
17863           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17864           p_column_value                          => p_credit_rating_rec.credit_score_commentary5,
17865           x_return_status                         => x_return_status);
17866 
17867       /*IF g_debug THEN
17868           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17869               'credit_score_commentary5 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17870               'x_return_status = ' || x_return_status, l_debug_prefix);
17871       END IF;
17872       */
17873       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17874            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'credit_score_commentary5 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17875               'x_return_status = ' || x_return_status,
17876                                   p_msg_level=>fnd_log.level_statement);
17877     END IF;
17878 
17879       ------------------------------------------
17880       -- validation for credit_score_commentary6
17881       ------------------------------------------
17882 
17883       -- credit_score_commentary6 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17884       validate_lookup (
17885           p_column                                => 'credit_score_commentary6',
17886           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17887           p_column_value                          => p_credit_rating_rec.credit_score_commentary6,
17888           x_return_status                         => x_return_status);
17889 
17890       /*IF g_debug THEN
17891           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17892               'credit_score_commentary6 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17893               'x_return_status = ' || x_return_status, l_debug_prefix);
17894       END IF;
17895       */
17896       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17897            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'credit_score_commentary6 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17898               'x_return_status = ' || x_return_status,
17899                                   p_msg_level=>fnd_log.level_statement);
17900       END IF;
17901 
17902        ------------------------------------------
17903       -- validation for credit_score_commentary7
17904       ------------------------------------------
17905 
17906       -- credit_score_commentary7 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17907       validate_lookup (
17908           p_column                                => 'credit_score_commentary7',
17909           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17910           p_column_value                          => p_credit_rating_rec.credit_score_commentary7,
17911           x_return_status                         => x_return_status);
17912 
17913       /*IF g_debug THEN
17914           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17915               'credit_score_commentary7 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17916               'x_return_status = ' || x_return_status, l_debug_prefix);
17917       END IF;
17918       */
17919       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17920            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'credit_score_commentary7 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17921               'x_return_status = ' || x_return_status,
17922                                   p_msg_level=>fnd_log.level_statement);
17923      END IF;
17924 
17925       ------------------------------------------
17926       -- validation for credit_score_commentary8
17927       ------------------------------------------
17928 
17929       -- credit_score_commentary8 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17930       validate_lookup (
17931           p_column                                => 'credit_score_commentary8',
17932           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17933           p_column_value                          => p_credit_rating_rec.credit_score_commentary8,
17934           x_return_status                         => x_return_status);
17935 
17936       /*IF g_debug THEN
17937           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17938               'credit_score_commentary8 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17939               'x_return_status = ' || x_return_status, l_debug_prefix);
17940       END IF;
17941       */
17942       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17943            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17944            p_message=>'credit_score_commentary8 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17945                   'x_return_status = ' || x_return_status,
17946                                   p_msg_level=>fnd_log.level_statement);
17947       END IF;
17948 
17949       ------------------------------------------
17950       -- validation for credit_score_commentary9
17951       ------------------------------------------
17952 
17953       -- credit_score_commentary9 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17954       validate_lookup (
17955           p_column                                => 'credit_score_commentary9',
17956           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17957           p_column_value                          => p_credit_rating_rec.credit_score_commentary9,
17958           x_return_status                         => x_return_status);
17959 
17960       /*IF g_debug THEN
17961           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17962               'credit_score_commentary9 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17963               'x_return_status = ' || x_return_status, l_debug_prefix);
17964       END IF;
17965       */
17966       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17967            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17968            p_message=>'credit_score_commentary9 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17969                         'x_return_status = ' || x_return_status,
17970                                   p_msg_level=>fnd_log.level_statement);
17971       END IF;
17972 
17973       -------------------------------------------
17974       -- validation for credit_score_commentary10
17975       -------------------------------------------
17976 
17977       -- credit_score_commentary10 is lookup code in lookup type CREDIT_SCORE_COMMENTARY
17978       validate_lookup (
17979           p_column                                => 'credit_score_commentary10',
17980           p_lookup_type                           => 'CREDIT_SCORE_COMMENTARY',
17981           p_column_value                          => p_credit_rating_rec.credit_score_commentary10,
17982           x_return_status                         => x_return_status);
17983 
17984       /*IF g_debug THEN
17985           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17986               'credit_score_commentary10 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17987               'x_return_status = ' || x_return_status, l_debug_prefix);
17988       END IF;
17989       */
17990       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
17991            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
17992            p_message=>'credit_score_commentary10 should be in lookup CREDIT_SCORE_COMMENTARY. ' ||
17993                  'x_return_status = ' || x_return_status,
17994                                   p_msg_level=>fnd_log.level_statement);
17995       END IF;
17996 
17997       ------------------------------------------
17998       -- validation for failure_score_commentary
17999       ------------------------------------------
18000 
18001       -- failure_score_commentary is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18002       validate_lookup (
18003           p_column                                => 'failure_score_commentary',
18004           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18005           p_column_value                          => p_credit_rating_rec.failure_score_commentary,
18006           x_return_status                         => x_return_status);
18007 
18008       /*IF g_debug THEN
18009           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18010               'failure_score_commentary should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18011               'x_return_status = ' || x_return_status, l_debug_prefix);
18012       END IF;
18013       */
18014       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18015            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18016            p_message=>'failure_score_commentary should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18017               'x_return_status = ' || x_return_status,
18018                                   p_msg_level=>fnd_log.level_statement);
18019       END IF;
18020 
18021       -------------------------------------------
18022       -- validation for failure_score_commentary2
18023       -------------------------------------------
18024 
18025       -- failure_score_commentary2 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18026       validate_lookup (
18027           p_column                                => 'failure_score_commentary2',
18028           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18029           p_column_value                          => p_credit_rating_rec.failure_score_commentary2,
18030           x_return_status                         => x_return_status);
18031 
18032       /*IF g_debug THEN
18033           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18034               'failure_score_commentary2 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18035               'x_return_status = ' || x_return_status, l_debug_prefix);
18036       END IF;
18037       */
18038       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18039            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18040            p_message=>'failure_score_commentary2 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18041                   'x_return_status = ' || x_return_status,
18042                                   p_msg_level=>fnd_log.level_statement);
18043     END IF;
18044 
18045       -------------------------------------------
18046       -- validation for failure_score_commentary3
18047       -------------------------------------------
18048 
18049       -- failure_score_commentary3 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18050       validate_lookup (
18051           p_column                                => 'failure_score_commentary3',
18052           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18053           p_column_value                          => p_credit_rating_rec.failure_score_commentary3,
18054           x_return_status                         => x_return_status);
18055 
18056       /*IF g_debug THEN
18057           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18058               'failure_score_commentary2 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18059               'x_return_status = ' || x_return_status, l_debug_prefix);
18060       END IF;
18061       */
18062       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18063            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18064            p_message=>'failure_score_commentary2 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18065               'x_return_status = ' || x_return_status,
18066                                   p_msg_level=>fnd_log.level_statement);
18067     END IF;
18068 
18069       -------------------------------------------
18070       -- validation for failure_score_commentary4
18071       -------------------------------------------
18072 
18073       -- failure_score_commentary4 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18074       validate_lookup (
18075           p_column                                => 'failure_score_commentary4',
18076           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18077           p_column_value                          => p_credit_rating_rec.failure_score_commentary4,
18078           x_return_status                         => x_return_status);
18079 
18080       /*IF g_debug THEN
18081           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18082               'failure_score_commentary4 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18083               'x_return_status = ' || x_return_status, l_debug_prefix);
18084       END IF;
18085       */
18086       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18087            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18088            p_message=>'failure_score_commentary4 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18089                                         'x_return_status = ' || x_return_status,
18090                                   p_msg_level=>fnd_log.level_statement);
18091     END IF;
18092 
18093       -------------------------------------------
18094       -- validation for failure_score_commentary5
18095       -------------------------------------------
18096 
18097       -- failure_score_commentary5 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18098       validate_lookup (
18099           p_column                                => 'failure_score_commentary5',
18100           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18101           p_column_value                          => p_credit_rating_rec.failure_score_commentary5,
18102           x_return_status                         => x_return_status);
18103 
18104       /*IF g_debug THEN
18105           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18106               'failure_score_commentary5 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18107               'x_return_status = ' || x_return_status, l_debug_prefix);
18108       END IF;
18109       */
18110       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18111            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18112            p_message=>'failure_score_commentary5 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18113                                         'x_return_status = ' || x_return_status,
18114                                   p_msg_level=>fnd_log.level_statement);
18115       END IF;
18116 
18117       -------------------------------------------
18118       -- validation for failure_score_commentary6
18119       -------------------------------------------
18120 
18121       -- failure_score_commentary6 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18122       validate_lookup (
18123           p_column                                => 'failure_score_commentary6',
18124           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18125           p_column_value                          => p_credit_rating_rec.failure_score_commentary6,
18126           x_return_status                         => x_return_status);
18127 
18128       /*IF g_debug THEN
18129           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18130               'failure_score_commentary6 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18131               'x_return_status = ' || x_return_status, l_debug_prefix);
18132       END IF;
18133       */
18134       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18135            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18136            p_message=>'failure_score_commentary6 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18137                                         'x_return_status = ' || x_return_status,
18138                                   p_msg_level=>fnd_log.level_statement);
18139       END IF;
18140 
18141       -------------------------------------------
18142       -- validation for failure_score_commentary7
18143       -------------------------------------------
18144 
18145       -- failure_score_commentary7 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18146       validate_lookup (
18147           p_column                                => 'failure_score_commentary7',
18148           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18149           p_column_value                          => p_credit_rating_rec.failure_score_commentary7,
18150           x_return_status                         => x_return_status);
18151 
18152       /*IF g_debug THEN
18153           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18154               'failure_score_commentary7 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18155               'x_return_status = ' || x_return_status, l_debug_prefix);
18156       END IF;
18157       */
18158       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18159            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18160            p_message=>'failure_score_commentary7 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18161                           'x_return_status = ' || x_return_status,
18162                                   p_msg_level=>fnd_log.level_statement);
18163       END IF;
18164 
18165       -------------------------------------------
18166       -- validation for failure_score_commentary8
18167       -------------------------------------------
18168 
18169       -- failure_score_commentary8 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18170       validate_lookup (
18171           p_column                                => 'failure_score_commentary8',
18172           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18173           p_column_value                          => p_credit_rating_rec.failure_score_commentary8,
18174           x_return_status                         => x_return_status);
18175 
18176       /*IF g_debug THEN
18177           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18178               'failure_score_commentary8 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18179               'x_return_status = ' || x_return_status, l_debug_prefix);
18180       END IF;
18181       */
18182       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18183            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18184            p_message=>'failure_score_commentary8 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18185                                         'x_return_status = ' || x_return_status,
18186                                   p_msg_level=>fnd_log.level_statement);
18187       END IF;
18188 
18189       -------------------------------------------
18190       -- validation for failure_score_commentary9
18191       -------------------------------------------
18192 
18193       -- failure_score_commentary9 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18194       validate_lookup (
18195           p_column                                => 'failure_score_commentary9',
18196           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18197           p_column_value                          => p_credit_rating_rec.failure_score_commentary9,
18198           x_return_status                         => x_return_status);
18199 
18200       /*IF g_debug THEN
18201           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18202               'failure_score_commentary9 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18203               'x_return_status = ' || x_return_status, l_debug_prefix);
18204       END IF;
18205       */
18206       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18207            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18208            p_message=>'failure_score_commentary9 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18209                          'x_return_status = ' || x_return_status,
18210                                   p_msg_level=>fnd_log.level_statement);
18211       END IF;
18212 
18213       --------------------------------------------
18214       -- validation for failure_score_commentary10
18215       --------------------------------------------
18216 
18217       -- failure_score_commentary10 is lookup code in lookup type FAILURE_SCORE_COMMENTARY
18218       validate_lookup (
18219           p_column                                => 'failure_score_commentary10',
18220           p_lookup_type                           => 'FAILURE_SCORE_COMMENTARY',
18221           p_column_value                          => p_credit_rating_rec.failure_score_commentary10,
18222           x_return_status                         => x_return_status);
18223 
18224       /*IF g_debug THEN
18225           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18226               'failure_score_commentary10 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18227               'x_return_status = ' || x_return_status, l_debug_prefix);
18228       END IF;
18229       */
18230       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18231            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18232            p_message=>'failure_score_commentary10 should be in lookup FAILURE_SCORE_COMMENTARY. ' ||
18233               'x_return_status = ' || x_return_status,
18234                                   p_msg_level=>fnd_log.level_statement);
18235     END IF;
18236 
18237       --------------------------------------------
18238       -- validation for credit_score_override_code
18239       --------------------------------------------
18240 
18241       -- credit_score_override_code is lookup code in lookup type FAILURE_SCORE_OVERRIDE_CODE
18242       validate_lookup (
18243           p_column                                => 'credit_score_override_code',
18244           p_lookup_type                           => 'FAILURE_SCORE_OVERRIDE_CODE',
18245           p_column_value                          => p_credit_rating_rec.credit_score_override_code,
18246           x_return_status                         => x_return_status);
18247 
18248       /*IF g_debug THEN
18249           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18250               'credit_score_override_code should be in lookup FAILURE_SCORE_OVERRIDE_CODE. ' ||
18251               'x_return_status = ' || x_return_status, l_debug_prefix);
18252       END IF;
18253       */
18254       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18255            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18256            p_message=>'credit_score_override_code should be in lookup FAILURE_SCORE_OVERRIDE_CODE. ' ||
18257                                         'x_return_status = ' || x_return_status,
18258                                   p_msg_level=>fnd_log.level_statement);
18259     END IF;
18260 
18261       --------------------------------------------
18262       -- validation for debarment_ind
18263       --------------------------------------------
18264 /****Logical APIs - validation not required****/
18265   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
18266       -- debarment_ind is lookup code in lookup type YES/NO
18267       validate_lookup (
18268           p_column                                => 'debarment_ind',
18269           p_lookup_type                           => 'YES/NO',
18270           p_column_value                          => p_credit_rating_rec.debarment_ind,
18271           x_return_status                         => x_return_status);
18272 
18273       /*IF g_debug THEN
18274           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18275               'debarment_ind should be in lookup YES/NO. ' ||
18276               'x_return_status = ' || x_return_status, l_debug_prefix);
18277       END IF;
18278       */
18279       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18280            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'debarment_ind should be in lookup YES/NO. ' ||
18281                          'x_return_status = ' || x_return_status,
18282                                   p_msg_level=>fnd_log.level_statement);
18283       END IF;
18284   END IF;
18285 
18286       --------------------------------------------
18287       -- validation for suit_ind
18288       --------------------------------------------
18289 /****Logical APIs - validation not required****/
18290   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
18291       -- suit_ind is lookup code in lookup type YES/NO
18292       validate_lookup (
18293           p_column                                => 'suit_ind',
18294           p_lookup_type                           => 'YES/NO',
18295           p_column_value                          => p_credit_rating_rec.suit_ind,
18296           x_return_status                         => x_return_status);
18297 
18298       /*IF g_debug THEN
18299           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18300               'suit_ind should be in lookup YES/NO. ' ||
18301               'x_return_status = ' || x_return_status, l_debug_prefix);
18302       END IF;
18303       */
18304       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18305            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'suit_ind should be in lookup YES/NO. ' ||
18306                                   'x_return_status = ' || x_return_status,
18307                                   p_msg_level=>fnd_log.level_statement);
18308       END IF;
18309   END IF;
18310 
18311       --------------------------------------------
18312       -- validation for lien_ind
18313       --------------------------------------------
18314 /****Logical APIs - validation not required****/
18315   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
18316       -- lien_ind is lookup code in lookup type YES/NO
18317       validate_lookup (
18318           p_column                                => 'lien_ind',
18319           p_lookup_type                           => 'YES/NO',
18320           p_column_value                          => p_credit_rating_rec.lien_ind,
18321           x_return_status                         => x_return_status);
18322 
18323       /*IF g_debug THEN
18324           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18325               'lien_ind should be in lookup YES/NO. ' ||
18326               'x_return_status = ' || x_return_status, l_debug_prefix);
18327       END IF;
18328       */
18329       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18330            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'lien_ind should be in lookup YES/NO. ' ||
18331                                                  'x_return_status = ' || x_return_status,
18332                                   p_msg_level=>fnd_log.level_statement);
18333       END IF;
18334   END IF;
18335 
18336       --------------------------------------------
18337       -- validation for judgement_ind
18338       --------------------------------------------
18339 /****Logical APIs - validation not required****/
18340   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
18341       -- judgement_ind is lookup code in lookup type YES/NO
18342       validate_lookup (
18343           p_column                                => 'judgement_ind',
18344           p_lookup_type                           => 'YES/NO',
18345           p_column_value                          => p_credit_rating_rec.judgement_ind,
18346           x_return_status                         => x_return_status);
18347 
18348       /*IF g_debug THEN
18349           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18350               'judgement_ind should be in lookup YES/NO. ' ||
18351               'x_return_status = ' || x_return_status, l_debug_prefix);
18352       END IF;
18353       */
18354       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18355            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'judgement_ind should be in lookup YES/NO. ' ||
18356               'x_return_status = ' || x_return_status,
18357                                   p_msg_level=>fnd_log.level_statement);
18358       END IF;
18359   END IF;
18360 
18361       --------------------------------------------
18362       -- validation for no_trade_ind
18363       --------------------------------------------
18364 /****Logical APIs - validation not required****/
18365   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
18366       -- no_trade_ind is lookup code in lookup type YES/NO
18367       validate_lookup (
18368           p_column                                => 'no_trade_ind',
18369           p_lookup_type                           => 'YES/NO',
18370           p_column_value                          => p_credit_rating_rec.no_trade_ind,
18371           x_return_status                         => x_return_status);
18372 
18373       /*IF g_debug THEN
18374           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18375               'no_trade_ind should be in lookup YES/NO. ' ||
18376               'x_return_status = ' || x_return_status, l_debug_prefix);
18377       END IF;
18378       */
18379       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18380            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'no_trade_ind should be in lookup YES/NO. ' ||
18381                                          'x_return_status = ' || x_return_status,
18382                                   p_msg_level=>fnd_log.level_statement);
18383      END IF;
18384   END IF;
18385 
18386       --------------------------------------------
18387       -- validation for prnt_hq_bkcy_ind
18388       --------------------------------------------
18389       --Bug 2898670: prnt_hq_bkcy_ind lookup code should be in the
18390       --lookup_type PRNT_HQ_IND instead of YES/NO
18391       validate_lookup (
18392           p_column                                => 'prnt_hq_bkcy_ind',
18393           p_lookup_type                           => 'PRNT_HQ_IND',
18394           p_column_value                          => p_credit_rating_rec.prnt_hq_bkcy_ind,
18395           x_return_status                         => x_return_status);
18396 
18397       /*IF g_debug THEN
18398           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18399               'prnt_hq_bkcy_ind should be in lookup PRNT_HQ_IND. ' ||
18400               'x_return_status = ' || x_return_status, l_debug_prefix);
18401       END IF;
18402       */
18403       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18404            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'prnt_hq_bkcy_ind should be in lookup PRNT_HQ_IND. ' ||
18405                                         'x_return_status = ' || x_return_status,
18406                                   p_msg_level=>fnd_log.level_statement);
18407       END IF;
18408 
18409       ----------------------------------------------
18410       -- validation for maximum_credit_currency_code
18411       ----------------------------------------------
18412 
18413       -- maximum_credit_currency_code is foreign key to FND_CURRENCIES.CURRENCY_CODE
18414       IF p_create_update_flag = 'C'
18415          AND
18416          p_credit_rating_rec.maximum_credit_currency_code IS NOT NULL
18417          AND
18418          p_credit_rating_rec.maximum_credit_currency_code <> fnd_api.g_miss_char
18419       THEN
18420           BEGIN
18421               --Bug 2898670: Changed the validation as the foreign key validation
18422               --has to be against active records
18423               --Bug 3877782. Added the condition to consider start_date_active and end_date_active.
18424               SELECT 'Y'
18425               INTO   l_dummy
18426               FROM   fnd_currencies f
18427               WHERE  f.currency_code = p_credit_rating_rec.maximum_credit_currency_code
18428               AND    currency_flag = 'Y'
18429               AND    enabled_flag = 'Y'
18430               AND    trunc(sysdate) between trunc(nvl(start_date_active,sysdate))
18431                                     and      trunc(nvl(end_date_active,sysdate));
18432           EXCEPTION
18433               WHEN NO_DATA_FOUND THEN
18434                   fnd_message.set_name('AR', 'HZ_API_INVALID_FK');
18435                   fnd_message.set_token('FK', 'currency_code');
18436                   fnd_message.set_token('COLUMN', 'maximum_credit_currency_code');
18437                   fnd_message.set_token('TABLE', 'fnd_currencies');
18438                   fnd_msg_pub.add;
18439                   x_return_status := fnd_api.g_ret_sts_error;
18440           END;
18441 
18442           /*IF g_debug THEN
18443               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18444                   'maximum_credit_currency_code has foreign key fnd_currencies.currency_code. ' ||
18445                   'x_return_status = ' || x_return_status, l_debug_prefix);
18446           END IF;
18447           */
18448           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18449                 hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18450                 p_message=>'maximum_credit_currency_code has foreign key fnd_currencies.currency_code. ' ||
18451                           'x_return_status = ' || x_return_status,
18452                                   p_msg_level=>fnd_log.level_statement);
18453           END IF;
18454 
18455       END IF;
18456 
18457 
18458       ------------------------
18459       -- validation for status
18460       ------------------------
18461 /****Logical APIs - validation not required****/
18462   IF(HZ_UTILITY_V2PUB.G_CALLING_API IS NULL) THEN
18463       -- status is lookup code in lookup type REGISTRY_STATUS
18464       IF p_credit_rating_rec.status IS NOT NULL
18465          AND
18466          p_credit_rating_rec.status <> fnd_api.g_miss_char
18467          AND
18468          (p_create_update_flag = 'C'
18469           OR
18470           (p_create_update_flag = 'U'
18471            AND
18472            p_credit_rating_rec.status <> NVL(l_status, fnd_api.g_miss_char)
18473          )
18474         )
18475       THEN
18476           validate_lookup (
18477               p_column                                => 'status',
18478               p_lookup_type                           => 'REGISTRY_STATUS',
18479               p_column_value                          => p_credit_rating_rec.status,
18480               x_return_status                         => x_return_status);
18481 
18482           /*IF g_debug THEN
18483               hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18484                   'status is lookup code in lookup type REGISTRY_STATUS. ' ||
18485                   'x_return_status = ' || x_return_status, l_debug_prefix);
18486           END IF;
18487           */
18488           IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18489              hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18490              p_message=>'status is lookup code in lookup type REGISTRY_STATUS. ' ||
18491                                                 'x_return_status = ' || x_return_status,
18492                                   p_msg_level=>fnd_log.level_statement);
18493           END IF;
18494 
18495       END IF;
18496   END IF;
18497 
18498       -- status cannot be set to null during update
18499       IF p_create_update_flag = 'U' THEN
18500           validate_cannot_update_to_null (
18501               p_column                                => 'status',
18502               p_column_value                          => p_credit_rating_rec.status,
18503               x_return_status                         => x_return_status);
18504       END IF;
18505 
18506       --------------------------------------------------------
18507       -- validate credit_score_natl_percentile ( Bug 3181460 )
18508       --------------------------------------------------------
18509       -- This column should have a value within the range 0 - 100.
18510 
18511       IF p_credit_rating_rec.credit_score_natl_percentile IS NOT NULL AND
18512          p_credit_rating_rec.credit_score_natl_percentile <> FND_API.G_MISS_NUM AND
18513          (p_create_update_flag = 'C' OR
18514           (
18515           p_create_update_flag = 'U' AND
18516           p_credit_rating_rec.credit_score_natl_percentile <> l_credit_score_natl_percentile
18517           )
18518          )
18519       THEN
18520           IF p_credit_rating_rec.credit_score_natl_percentile < 0 OR
18521              p_credit_rating_rec.credit_score_natl_percentile > 100
18522           THEN
18523               FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_PERCENTAGE');
18524               FND_MESSAGE.SET_TOKEN('INVALIDVAL', p_credit_rating_rec.credit_score_natl_percentile);
18525               FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'credit_score_natl_percentile');
18526               FND_MSG_PUB.ADD;
18527               x_return_status := fnd_api.g_ret_sts_error;
18528           END IF;
18529       END IF;
18530 
18531       ----------------------------------------------------------
18532       -- validate failure_score_natnl_percentile ( Bug 3181460 )
18533       ----------------------------------------------------------
18534       -- This column should have a value within the range 0 - 100.
18535 
18536       IF p_credit_rating_rec.failure_score_natnl_percentile IS NOT NULL AND
18537          p_credit_rating_rec.failure_score_natnl_percentile <> FND_API.G_MISS_NUM AND
18538          (
18539          p_create_update_flag = 'C' OR
18540           (
18541           p_create_update_flag = 'U' AND
18542           p_credit_rating_rec.failure_score_natnl_percentile <> l_fail_score_natnl_percentile
18543           )
18544          )
18545       THEN
18546           IF p_credit_rating_rec.failure_score_natnl_percentile < 0 OR
18547              p_credit_rating_rec.failure_score_natnl_percentile > 100
18548           THEN
18549               FND_MESSAGE.SET_NAME('AR', 'HZ_API_INVALID_PERCENTAGE');
18550               FND_MESSAGE.SET_TOKEN('INVALIDVAL', p_credit_rating_rec.failure_score_natnl_percentile);
18551               FND_MESSAGE.SET_TOKEN('ATTRIBUTE', 'failure_score_natnl_percentile');
18552               FND_MSG_PUB.ADD;
18553               x_return_status := fnd_api.g_ret_sts_error;
18554           END IF;
18555       END IF;
18556 
18557 
18558       --------------------------------------
18559       -- validate created_by_module
18560       --------------------------------------
18561 
18562       validate_created_by_module(
18563         p_create_update_flag     => p_create_update_flag,
18564         p_created_by_module      => p_credit_rating_rec.created_by_module,
18565         p_old_created_by_module  => l_created_by_module,
18566         x_return_status          => x_return_status);
18567 
18568       --------------------------------------------------------------
18569       -- validate content_source_type and actual_content_source_type
18570       --------------------------------------------------------------
18571     /* SSM SST Integration and Extension
18572      * actual_content_source is now a foreign key to HZ_ORIG_SYSTEMS_B.orig_system with sst_flag = 'Y'.
18573       -- actual_content_source is lookup code in lookup type CONTENT_SOURCE_TYPE
18574       validate_lookup (
18575           p_column                                => 'actual_content_source',
18576           p_lookup_type                           => 'CONTENT_SOURCE_TYPE',
18577           p_column_value                          => p_credit_rating_rec.actual_content_source,
18578           x_return_status                         => x_return_status);
18579     */
18580       /*IF g_debug THEN
18581           hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18582               'actual_content_source should be in lookup CONTENT_SOURCE_TYPE. ' ||
18583               'x_return_status = ' || x_return_status, l_debug_prefix);
18584       END IF;
18585       */
18586     /*
18587       IF fnd_log.level_statement>=fnd_log.g_current_runtime_level THEN
18588            hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,
18589            p_message=>'actual_content_source should be in lookup CONTENT_SOURCE_TYPE. ' ||
18590                                                 'x_return_status = ' || x_return_status,
18591                                   p_msg_level=>fnd_log.level_statement);
18592        END IF;
18593     */
18594       HZ_MIXNM_UTILITY.ValidateContentSource (
18595         p_api_version                       => 'V2',
18596         p_create_update_flag                => p_create_update_flag,
18597         p_check_update_privilege            => 'Y',
18598         p_content_source_type               => 'USER_ENTERED',
18599         p_old_content_source_type           => 'USER_ENTERED',
18600         p_actual_content_source             => p_credit_rating_rec.actual_content_source,
18601         p_old_actual_content_source         => l_actual_content_source,
18602         p_entity_name                       => 'HZ_CREDIT_RATINGS',
18603         x_return_status                     => x_return_status );
18604 
18605       -- Debug info.
18606       /*IF g_debug THEN
18607           hz_utility_v2pub.debug ('validate_credit_rating (-)');
18608       END IF;
18609       */
18610       IF fnd_log.level_procedure>=fnd_log.g_current_runtime_level THEN
18611         hz_utility_v2pub.debug(p_prefix=>l_debug_prefix,p_message=>'validate_credit_rating (-)',
18612                                p_msg_level=>fnd_log.level_procedure);
18613       END IF;
18614 
18615       --disable_debug;
18616 
18617   END validate_credit_rating;
18618 
18619 
18620   /**
18621    * PROCEDURE validate_created_by_module
18622    *
18623    * DESCRIPTION
18624    *    validate created by module
18625    * ARGUMENTS
18626    *   IN:
18627    *     p_create_update_flag      create update flag
18628    *     p_created_by_module       created by module
18629    *     p_old_created_by_module   old value of created by module
18630    *     x_return_status           return status
18631    */
18632 
18633   PROCEDURE validate_created_by_module (
18634       p_create_update_flag          IN     VARCHAR2,
18635       p_created_by_module           IN     VARCHAR2,
18636       p_old_created_by_module       IN     VARCHAR2,
18637       x_return_status               IN OUT NOCOPY VARCHAR2
18638   ) IS
18639 
18640       l_column                      CONSTANT VARCHAR2(30) := 'created_by_module';
18641 
18642   BEGIN
18643 
18644       -- skip mandatory and non-updateable check from logical API
18645       IF HZ_UTILITY_V2PUB.G_CALLING_API IS NULL THEN
18646         -- created_by_module is mandatory field
18647         -- Since created_by_module is non-updateable, we only need to check mandatory
18648         -- during creation.
18649 
18650         IF p_create_update_flag = 'C' THEN
18651           validate_mandatory (
18652             p_create_update_flag     => p_create_update_flag,
18653             p_column                 => l_column,
18654             p_column_value           => p_created_by_module,
18655             x_return_status          => x_return_status);
18656 
18657           IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
18658             hz_utility_v2pub.debug(
18659               p_prefix               => '',
18660               p_message              => l_column || ' is mandatory. ' ||
18661                                         'x_return_status = ' || x_return_status,
18662               p_msg_level            => fnd_log.level_statement);
18663           END IF;
18664         END IF;
18665 
18666         -- created_by_module is non-updateable field. But it can be updated from
18667         -- NULL to some value.
18668 
18669         IF p_create_update_flag = 'U' AND
18670            p_created_by_module IS NOT NULL
18671         THEN
18672           validate_nonupdateable (
18673             p_column                 => l_column,
18674             p_column_value           => p_created_by_module,
18675             p_old_column_value       => p_old_created_by_module,
18676             p_restricted             => 'N',
18677             x_return_status          => x_return_status);
18678 
18679           IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
18680             hz_utility_v2pub.debug(
18681               p_prefix               => '',
18682               p_message              => l_column || ' is non-updateable. It can be updated from NULL to a value. ' ||
18683                                         'x_return_status = ' || x_return_status,
18684               p_msg_level            => fnd_log.level_statement);
18685           END IF;
18686         END IF;
18687       END IF;
18688 
18689       -- created_by_module is lookup code in lookup type HZ_CREATED_BY_MODULES
18690       IF p_created_by_module IS NOT NULL AND
18691          p_created_by_module <> fnd_api.g_miss_char AND
18692          (p_create_update_flag = 'C' OR
18693           (p_create_update_flag = 'U' AND
18694            (p_old_created_by_module IS NULL OR
18695             p_created_by_module <> p_old_created_by_module)))
18696       THEN
18697         validate_lookup (
18698           p_column                   => l_column,
18699           p_lookup_type              => 'HZ_CREATED_BY_MODULES',
18700           p_column_value             => p_created_by_module,
18701           x_return_status            => x_return_status);
18702 
18703         IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
18704           hz_utility_v2pub.debug(
18705             p_prefix                 => '',
18706             p_message                => l_column || ' is lookup code in lookup type HZ_CREATED_BY_MODULES. ' ||
18707                                         'x_return_status = ' || x_return_status,
18708             p_msg_level              => fnd_log.level_statement);
18709         END IF;
18710       END IF;
18711 
18712       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
18713         hz_utility_v2pub.debug(
18714           p_prefix                   => '',
18715           p_message                  => 'after validate ' || l_column || ' ... ' ||
18716                                         'x_return_status = ' || x_return_status,
18717           p_msg_level                => fnd_log.level_statement);
18718       END IF;
18719 
18720   END validate_created_by_module;
18721 
18722 
18723   /**
18724    * PROCEDURE validate_application_id
18725    *
18726    * DESCRIPTION
18727    *    validate application id
18728    * ARGUMENTS
18729    *   IN:
18730    *     p_create_update_flag      create update flag
18731    *     p_application_id          application id
18732    *     p_old_application_id      old value of application id
18733    *     x_return_status           return status
18734    */
18735 
18736   PROCEDURE validate_application_id (
18737       p_create_update_flag          IN     VARCHAR2,
18738       p_application_id              IN     NUMBER,
18739       p_old_application_id          IN     NUMBER,
18740       x_return_status               IN OUT NOCOPY VARCHAR2
18741   ) IS
18742 
18743       l_column                      CONSTANT VARCHAR2(30) := 'application_id';
18744 
18745   BEGIN
18746 
18747       -- skip non-updateable check from logical API
18748       IF HZ_UTILITY_V2PUB.G_CALLING_API IS NULL THEN
18749         -- application_id is non-updateable field. But it can be updated from NULL
18750         -- to some value.
18751 
18752         IF p_create_update_flag = 'U' AND
18753            p_application_id IS NOT NULL
18754         THEN
18755           validate_nonupdateable (
18756             p_column                 => l_column,
18757             p_column_value           => p_application_id,
18758             p_old_column_value       => p_old_application_id,
18759             p_restricted             => 'N',
18760             x_return_status          => x_return_status);
18761 
18762           IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
18763             hz_utility_v2pub.debug(
18764               p_prefix               => '',
18765               p_message              => l_column || ' is non-updateable. It can be updated from NULL to a value. ' ||
18766                                         'x_return_status = ' || x_return_status,
18767               p_msg_level            => fnd_log.level_statement);
18768           END IF;
18769         END IF;
18770       END IF;
18771 
18772       IF fnd_log.level_statement >= fnd_log.g_current_runtime_level THEN
18773         hz_utility_v2pub.debug(
18774           p_prefix                   => '',
18775           p_message                  => 'after validate ' || l_column || ' ... ' ||
18776                                         'x_return_status = ' || x_return_status,
18777           p_msg_level                => fnd_log.level_statement);
18778       END IF;
18779 
18780   END validate_application_id;
18781 
18782 END hz_registry_validate_v2pub;