DBA Data[Home] [Help]

PACKAGE BODY: APPS.PER_MX_GEN_HIER_VALID

Source


1 package body per_mx_gen_hier_valid as
2 /* $Header: permxgenhiervald.pkb 120.0 2005/06/01 01:26:14 appldev noship $ */
3 --
4 /*
5 /*
6    ******************************************************************
7    *                                                                *
8    *  Copyright (C) 1992 Oracle Corporation UK Ltd.,                *
9    *                   Chertsey, England.                           *
10    *                                                                *
11    *  All rights reserved.                                          *
12    *                                                                *
13    *  This material has been provided pursuant to an agreement      *
14    *  containing restrictions on its use.  The material is also     *
15    *  protected by copyright law.  No part of this material may     *
16    *  be copied or distributed, transmitted or transcribed, in      *
17    *  any form or by any means, electronic, mechanical, magnetic,   *
18    *  manual, or otherwise, or disclosed to third parties without   *
19    *  the express written permission of Oracle Corporation UK Ltd,  *
20    *  Oracle Park, Bittams Lane, Guildford Road, Chertsey, Surrey,  *
21    *  England.                                                      *
22    *                                                                *
23    ******************************************************************
24 
25    Description: This package is used to validate generic hierarchy
26                 'Mexican HRMS Statutory Reporting' for Mexico.
27 
28    Change List
29    -----------
30    Date         Name        Vers   Bug No   Description
31    -----------  ----------  -----  -------  -----------------------------------
32    05-MAY-2004  vpandya     115.0            Created.
33    01-APR-2005  vpandya     115.2  4128530   Changed create_default_location
34                                              Checking mode and create default
35                                              location only when mode is not
36                                              COPY.
37 */
38 --
39 
40   /************************************************************************
41    Name      : validate_nodes
42    Purpose   : This procedure validates whether record exists for the same
43                Legal Employer and GRE within business group for active
44                hierarchy. This also validates whether record exists for
45                the location within the same hiearchy for the same GRE
46                or not.
47 
48                It will raise an error if entered values exists in
49                the generic hierarchy for this business group,
50 
51    Arguments : IN
52                P_BUSINESS_GROUP_ID           NUMBER
53                P_ENTITY_ID                   VARCHAR2
54                P_HIERARCHY_VERSION_ID        NUMBER
55                P_NODE_TYPE                   VARCHAR2
56                P_SEQ                         NUMBER
57                P_PARENT_HIERARCHY_NODE_ID    NUMBER
58                P_REQUEST_ID                  NUMBER
59                P_PROGRAM_APPLICATION_ID      NUMBER
60                P_PROGRAM_ID                  NUMBER
61                P_PROGRAM_UPDATE_DATE         DATE
62                P_EFFECTIVE_DATE              DATE
63    Notes     :
64   ************************************************************************/
65 
66   PROCEDURE validate_nodes( P_BUSINESS_GROUP_ID        in NUMBER
67                            ,P_ENTITY_ID                in VARCHAR2
68                            ,P_HIERARCHY_VERSION_ID     in NUMBER
69                            ,P_NODE_TYPE                in VARCHAR2
70                            ,P_SEQ                      in NUMBER
71                            ,P_PARENT_HIERARCHY_NODE_ID in NUMBER
72                            ,P_REQUEST_ID               in NUMBER
73                            ,P_PROGRAM_APPLICATION_ID   in NUMBER
74                            ,P_PROGRAM_ID               in NUMBER
75                            ,P_PROGRAM_UPDATE_DATE      in DATE
76                            ,P_EFFECTIVE_DATE           in DATE )
77   IS
78 
79   CURSOR c_active_hier( cp_bus_grp_id  number
80                        ,cp_hier_ver_id number
81                        ,cp_eff_date    date ) IS
82     select 1
83     from   per_gen_hierarchy_versions
84     where  business_group_id    = cp_bus_grp_id
85     and    hierarchy_version_id = cp_hier_ver_id
86     and    cp_eff_date between date_from and nvl(date_to,cp_eff_date)
87     and    status = 'A';
88 
89   CURSOR c_node_exists( cp_bus_grp_id  number
90                        ,cp_node_type   varchar2
91                        ,cp_entity_id   varchar2
92                        ,cp_eff_date    date ) IS
93     select 1
94     from   per_gen_hierarchy_nodes pghn
95           ,per_gen_hierarchy_versions pghv
96 	  ,per_gen_hierarchy pgh
97     where pghn.business_group_id = cp_bus_grp_id
98     and   pghn.node_type = cp_node_type
99     and   pghn.entity_id = cp_entity_id
100     and   pghv.business_group_id = cp_bus_grp_id
101     and   pghv.hierarchy_version_id = pghn.hierarchy_version_id
102     and   cp_eff_date between pghv.date_from and nvl(pghv.date_to,cp_eff_date)
103     and   pghv.status = 'A'
104     and   pgh.business_group_id = cp_bus_grp_id
105     and   pgh.hierarchy_id = pghv.hierarchy_id
106     and   pgh.type = 'MEXICO HRMS';
107 
108   CURSOR c_loc_node_exists( cp_bus_grp_id       number
109                            ,cp_hier_ver_id      number
110                            ,cp_node_type        varchar2
111                            ,cp_par_hier_node_id number
112                            ,cp_entity_id        varchar2 ) IS
113     select 1
114     from   per_gen_hierarchy_nodes
115     where  business_group_id    = cp_bus_grp_id
116     and    hierarchy_version_id = cp_hier_ver_id
117     and    node_type            = cp_node_type
118     and    nvl(parent_hierarchy_node_id, -999) = nvl(cp_par_hier_node_id, -999)
119     and    entity_id            = cp_entity_id;
120 
121     l_active_hierarchy number := 0;
122     l_node_val_exists  number := 0;
123 
124   BEGIN
125 
126     hr_utility.trace('Entering: PER_MX_GEN_HIER_VALID.VALIDATE_NODES');
127     hr_utility.trace('P_BUSINESS_GROUP_ID '||P_BUSINESS_GROUP_ID);
128     hr_utility.trace('P_ENTITY_ID '||P_ENTITY_ID);
129     hr_utility.trace('P_HIERARCHY_VERSION_ID '||P_HIERARCHY_VERSION_ID);
130     hr_utility.trace('P_NODE_TYPE '||P_NODE_TYPE);
131     hr_utility.trace('P_PARENT_HIERARCHY_NODE_ID '||P_PARENT_HIERARCHY_NODE_ID);
132     hr_utility.trace('P_EFFECTIVE_DATE '||P_EFFECTIVE_DATE);
133 
134 
135     open  c_active_hier( P_BUSINESS_GROUP_ID
136                         ,P_HIERARCHY_VERSION_ID
137                         ,P_EFFECTIVE_DATE );
138     fetch c_active_hier into l_active_hierarchy;
139     close c_active_hier;
140 
141     if l_active_hierarchy > 0 then
142 
143        hr_utility.trace('Active Hierarchy.');
144 
145        IF P_NODE_TYPE in ( 'MX LEGAL EMPLOYER', 'MX GRE' ) THEN
146 
147           hr_utility.trace('Node is either Legal Employer or GRE');
148 
149           open  c_node_exists( P_BUSINESS_GROUP_ID
150                               ,P_NODE_TYPE
151                               ,P_ENTITY_ID
152                               ,P_EFFECTIVE_DATE );
153           fetch c_node_exists into l_node_val_exists;
154           close c_node_exists;
155 
156 
157           IF l_node_val_exists > 0 THEN
158              hr_utility.trace('Organization already exists in the hierarchy.');
159              --
160              fnd_message.set_name('PER', 'HR_MX_GENHIER_ND_EXISTS');
161              fnd_message.raise_error;
162              --
163           END IF;
164 
165        ELSIF P_NODE_TYPE = 'MX LOCATION' THEN
166 
167           hr_utility.trace('Node is Location');
168 
169           open  c_loc_node_exists( P_BUSINESS_GROUP_ID
170                                   ,P_HIERARCHY_VERSION_ID
171                                   ,P_NODE_TYPE
172                                   ,P_PARENT_HIERARCHY_NODE_ID
173                                   ,P_ENTITY_ID );
174           fetch c_loc_node_exists into l_node_val_exists;
175           close c_loc_node_exists;
176 
177 
178           IF l_node_val_exists > 0 THEN
179              hr_utility.trace('Location record already exists.');
180              --
181              fnd_message.set_name('PER', 'HR_MX_GENHIER_LOC_EXIST_IN_GRE');
182              fnd_message.raise_error;
183              --
184           END IF;
185 
186        END IF;
187 
188     end if;
189 
190     hr_utility.trace('Leaving: PER_MX_GEN_HIER_VALID.VALIDATE_NODES');
191 
192   END validate_nodes;
193 
194   /************************************************************************
195    Name      : create_default_location
196    Purpose   : This procedure creates default location when GRE is entered.
197                It creates a records for the location for which
198                is associated to the entered GRE.
199 
200    Arguments : IN
201                P_HIERARCHY_NODE_ID           NUMBER
202                P_BUSINESS_GROUP_ID           NUMBER
203                P_ENTITY_ID                   VARCHAR2
204                P_HIERARCHY_VERSION_ID        NUMBER
205                P_NODE_TYPE                   VARCHAR2
206                P_SEQ                         NUMBER
207                P_PARENT_HIERARCHY_NODE_ID    NUMBER
208                P_REQUEST_ID                  NUMBER
209                P_PROGRAM_APPLICATION_ID      NUMBER
210                P_PROGRAM_ID                  NUMBER
211                P_PROGRAM_UPDATE_DATE         DATE
212                P_EFFECTIVE_DATE              DATE
213    Notes     :
214   ************************************************************************/
215 
216   PROCEDURE create_default_location( P_HIERARCHY_NODE_ID        in NUMBER
217                                     ,P_BUSINESS_GROUP_ID        in NUMBER
218                                     ,P_ENTITY_ID                in VARCHAR2
219                                     ,P_HIERARCHY_VERSION_ID     in NUMBER
220                                     ,P_NODE_TYPE                in VARCHAR2
221                                     ,P_SEQ                      in NUMBER
222                                     ,P_PARENT_HIERARCHY_NODE_ID in NUMBER
223                                     ,P_REQUEST_ID               in NUMBER
224                                     ,P_PROGRAM_APPLICATION_ID   in NUMBER
225                                     ,P_PROGRAM_ID               in NUMBER
226                                     ,P_PROGRAM_UPDATE_DATE      in DATE
227                                     ,P_EFFECTIVE_DATE           in DATE )
228   IS
229 
230   CURSOR c_get_loc_id( cp_bus_grp_id number
231                       ,cp_org_id     number) IS
232     select location_id
233     from   hr_organization_units
234     where  business_group_id = cp_bus_grp_id
235     and    organization_id   = cp_org_id;
236 
237     ln_location_id     number;
238     ln_hier_node_id    number;
239     ln_ovn             number;
240 
241   BEGIN
242 
243     hr_utility.trace('Entering: PER_MX_GEN_HIER_VALID.CREATE_DEFAULT_LOCATION');
244     hr_utility.trace('P_HIERARCHY_NODE_ID '||P_HIERARCHY_NODE_ID);
245     hr_utility.trace('P_BUSINESS_GROUP_ID '||P_BUSINESS_GROUP_ID);
246     hr_utility.trace('P_ENTITY_ID '||P_ENTITY_ID);
247     hr_utility.trace('P_HIERARCHY_VERSION_ID '||P_HIERARCHY_VERSION_ID);
248     hr_utility.trace('P_NODE_TYPE '||P_NODE_TYPE);
249     hr_utility.trace('P_PARENT_HIERARCHY_NODE_ID '||P_PARENT_HIERARCHY_NODE_ID);
250     hr_utility.trace('P_EFFECTIVE_DATE '||P_EFFECTIVE_DATE);
251 
252     IF P_NODE_TYPE = 'MX GRE' AND
253        NVL(PER_HIERARCHY_NODES_API.G_MODE, 'CREATE') <> 'COPY' THEN
254 
255        open  c_get_loc_id( P_BUSINESS_GROUP_ID
256                           ,P_ENTITY_ID );
257        fetch c_get_loc_id into ln_location_id;
258        close c_get_loc_id;
259 
260        hr_utility.trace('Creating location '||ln_location_id||
261                         ' for GRE '|| P_ENTITY_ID);
262 
263        per_hierarchy_nodes_api.create_hierarchy_nodes(
264               p_hierarchy_node_id         => ln_hier_node_id
265              ,p_business_group_id         => p_business_group_id
266              ,p_entity_id                 => ln_location_id
267              ,p_hierarchy_version_id      => p_hierarchy_version_id
268              ,p_node_type                 => 'MX LOCATION'
269              ,p_seq                       => 1
270              ,p_parent_hierarchy_node_id  => p_hierarchy_node_id
271              ,p_request_id                => p_request_id
272              ,p_program_application_id    => p_program_application_id
273              ,p_program_id                => p_program_id
274              ,p_program_update_date       => p_program_update_date
275              ,p_object_version_number     => ln_ovn
276              ,p_effective_date            => p_effective_date );
277 
278     END IF;
279 
280     hr_utility.trace('Leaving: PER_MX_GEN_HIER_VALID.CREATE_DEFAULT_LOCATION');
281 
282   END create_default_location;
283 
284   /************************************************************************
285    Name      : delete_nodes
286    Purpose   : This procedure checks following stuff before deleting any
287                record from the hierarchy.
288 
289                - DO NOT DELETE RECORD WHEN CHILD EXISTS
290                - DO NOT DELETE LOCATION  WHEN IT IS ASSOICATED TO AN
291                  ASSIGNMENT FOR ANY TIME PERIOD.
292 
293    Arguments : IN
294                P_HIERARCHY_NODE_ID           NUMBER
295                P_OBJECT_VERSION_NUMBER       NUMBER
296    Notes     :
297   ************************************************************************/
298 
299 --  PROCEDURE delete_nodes( P_HIERARCHY_NODE_ID     in NUMBER
300 --                         ,P_OBJECT_VERSION_NUMBER in NUMBER)
301 --  IS
302 --
303 --  CURSOR c_child_node_exists( cp_hier_node_id number
304 --                             ,cp_ovn          number) IS
305 --    select 1
306 --    from   per_gen_hierarchy_nodes
307 --    where  parent_hierarchy_node_id = cp_hier_node_id
308 --    and    object_version_number    = cp_ovn;
309 --
310 --  CURSOR c_get_node_value( cp_hier_node_id number
311 --                          ,cp_ovn          number) IS
312 --    select entity_id, node_type
313 --    from   per_gen_hierarchy_nodes
314 --    where  hierarchy_node_id     = cp_hier_node_id
315 --    and    object_version_number = cp_ovn;
316 --
317 --  CURSOR c_asg_loc_exists( cp_loc_id number ) IS
318 --    select 1
319 --    from   per_all_assignments_f
320 --    where  location_id = cp_loc_id;
321 --
322 --    ln_child_node_exists number := 0;
323 --    ln_asg_loc_exists    number := 0;
324 --
325 --    lv_entity_id  varchar2(240);
326 --    lv_node_type  varchar2(240);
327 --
328 --
329 --  BEGIN
330 --
331 --    hr_utility.trace('Entering: PER_MX_GEN_HIER_VALID.DELETE_NODES');
332 --    hr_utility.trace('P_HIERARCHY_NODE_ID '||P_HIERARCHY_NODE_ID);
333 --    hr_utility.trace('P_OBJECT_VERSION_NUMBER '||P_OBJECT_VERSION_NUMBER);
334 --
335 --    open  c_child_node_exists( P_HIERARCHY_NODE_ID
336 --                              ,P_OBJECT_VERSION_NUMBER);
337 --    fetch c_child_node_exists into ln_child_node_exists;
338 --    close c_child_node_exists;
339 --
340 --    IF ln_child_node_exists > 0 THEN
341 --       hr_utility.trace('Child node exists.');
342 --       --
343 --       fnd_message.set_name('PER', 'HR_MX_INVALID_ELEMENT_NAME');
344 --       fnd_message.raise_error;
345 --       --
346 --    END IF;
347 --
348 --    open  c_get_node_value( P_HIERARCHY_NODE_ID
349 --                           ,P_OBJECT_VERSION_NUMBER);
350 --    fetch c_get_node_value into lv_entity_id
351 --                               ,lv_node_type;
352 --    close c_get_node_value;
353 --
354 --    IF lv_node_type = 'MX LOCATION' then
355 --
356 --       open  c_asg_loc_exists( lv_entity_id );
357 --       fetch c_asg_loc_exists into ln_asg_loc_exists;
358 --       close c_asg_loc_exists;
359 --
360 --       IF ln_asg_loc_exists > 0 THEN
361 --          hr_utility.trace('Location is/was associated to an assignment.');
362 --          --
363 --          fnd_message.set_name('PER', 'HR_MX_INVALID_ELEMENT_NAME');
364 --          fnd_message.raise_error;
365 --          --
366 --       END IF;
367 --
368 --    END IF;
369 --
370 --    hr_utility.trace('Leaving: PER_MX_GEN_HIER_VALID.DELETE_NODES');
371 --
372 --  END delete_nodes;
373 
374   /************************************************************************
375    Name      : update_nodes
376    Purpose   : This procedure restrict to update any node value when
377                hierarchy is 'Active'.
378 
379    Arguments : IN
380                P_HIERARCHY_NODE_ID           NUMBER
381                P_ENTITY_ID                   VARCHAR2
382                P_NODE_TYPE                   VARCHAR2
383                P_SEQ                         NUMBER
384                P_PARENT_HIERARCHY_NODE_ID    NUMBER
385                P_REQUEST_ID                  NUMBER
386                P_PROGRAM_APPLICATION_ID      NUMBER
387                P_PROGRAM_ID                  NUMBER
388                P_PROGRAM_UPDATE_DATE         DATE
389                P_OBJECT_VERSION_NUMBER       NUMBER
390                P_EFFECTIVE_DATE              DATE
391 
392    Notes     :
393   ************************************************************************/
394 
395   PROCEDURE update_nodes( P_HIERARCHY_NODE_ID        in NUMBER
396                          ,P_ENTITY_ID                in VARCHAR2
397                          ,P_NODE_TYPE                in VARCHAR2
398                          ,P_SEQ                      in NUMBER
399                          ,P_PARENT_HIERARCHY_NODE_ID in NUMBER
400                          ,P_REQUEST_ID               in NUMBER
401                          ,P_PROGRAM_APPLICATION_ID   in NUMBER
402                          ,P_PROGRAM_ID               in NUMBER
403                          ,P_PROGRAM_UPDATE_DATE      in DATE
404                          ,P_OBJECT_VERSION_NUMBER    in NUMBER
405                          ,P_EFFECTIVE_DATE           in DATE )
406   IS
407 
408   CURSOR c_get_node_val( cp_hier_node_id       number ) IS
409     select business_group_id, hierarchy_version_id
410     from   per_gen_hierarchy_nodes
411     where  hierarchy_node_id = cp_hier_node_id;
412 
413   CURSOR c_active_hier( cp_bus_grp_id  number
414                        ,cp_hier_ver_id number
415                        ,cp_eff_date    date ) IS
416     select 1
417     from   per_gen_hierarchy_versions
418     where  business_group_id    = cp_bus_grp_id
419     and    hierarchy_version_id = cp_hier_ver_id
420     and    cp_eff_date between date_from and nvl(date_to,cp_eff_date)
421     and    status = 'A';
422 
423     l_active_hierarchy number := 0;
424     ln_bus_grp_id      number;
425     ln_hier_vers_id    number;
426 
427   BEGIN
428 
429     hr_utility.trace('Entering: PER_MX_GEN_HIER_VALID.UPDATE_NODES');
430     hr_utility.trace('P_ENTITY_ID '||P_ENTITY_ID);
431     hr_utility.trace('P_NODE_TYPE '||P_NODE_TYPE);
432     hr_utility.trace('P_PARENT_HIERARCHY_NODE_ID '||P_PARENT_HIERARCHY_NODE_ID);
433     hr_utility.trace('P_EFFECTIVE_DATE '||P_EFFECTIVE_DATE);
434 
435     open  c_get_node_val(P_HIERARCHY_NODE_ID);
436     fetch c_get_node_val into ln_bus_grp_id, ln_hier_vers_id;
437     close c_get_node_val;
438 
439     open  c_active_hier( ln_bus_grp_id
440                         ,ln_hier_vers_id
441                         ,p_effective_date );
442     fetch c_active_hier into l_active_hierarchy;
443     close c_active_hier;
444 
445     if l_active_hierarchy > 0 then
446        hr_utility.trace('Update any node is not allowed.');
447        --
448        fnd_message.set_name('PER', 'HR_MX_GENHIER_ND_UPD_NOT_ALLOW');
449        fnd_message.raise_error;
450        --
451     end if;
452 
453     hr_utility.trace('Leaving: PER_MX_GEN_HIER_VALID.UPDATE_NODES');
454 
455   END update_nodes;
456 
457   /************************************************************************
458    Name      : update_hier_versions
459    Purpose   : This procedure checks MX LEGAL EMPLOYER and MX GRE nodes
460                whether that exists in any other active hierachy
461                when hierachy is changed from 'Inactive' status to
462                'Active' status.
463 
464    Arguments : IN
465                P_HIERARCHY_VERSION_ID      NUMBER
466                P_VERSION_NUMBER            NUMBER
467                P_DATE_FROM                 DATE
468                P_DATE_TO                   DATE
469                P_STATUS                    VARCHAR2
470                P_VALIDATE_FLAG             VARCHAR2
471                P_REQUEST_ID                NUMBER
472                P_PROGRAM_APPLICATION_ID    NUMBER
473                P_PROGRAM_ID                NUMBER
474                P_PROGRAM_UPDATE_DATE       DATE
475                P_OBJECT_VERSION_NUMBER     NUMBER
476                P_EFFECTIVE_DATE            DATE
477 
478    Notes     :
479   ************************************************************************/
480 
481   PROCEDURE update_hier_versions( P_HIERARCHY_VERSION_ID   in NUMBER
482                                  ,P_VERSION_NUMBER         in NUMBER
483                                  ,P_DATE_FROM              in DATE
484                                  ,P_DATE_TO                in DATE
485                                  ,P_STATUS                 in VARCHAR2
486                                  ,P_VALIDATE_FLAG          in VARCHAR2
487                                  ,P_REQUEST_ID             in NUMBER
488                                  ,P_PROGRAM_APPLICATION_ID in NUMBER
489                                  ,P_PROGRAM_ID             in NUMBER
490                                  ,P_PROGRAM_UPDATE_DATE    in DATE
491                                  ,P_OBJECT_VERSION_NUMBER  in NUMBER
492                                  ,P_EFFECTIVE_DATE         in DATE )
493   IS
494 
495   CURSOR c_hier_status( cp_hier_ver_id number
496                        ,cp_version_no  number ) IS
497     select business_group_id, status
498     from   per_gen_hierarchy_versions
499     where  hierarchy_version_id = cp_hier_ver_id
500     and    version_number       = cp_version_no;
501 
502   CURSOR c_get_nodes( cp_bus_grp_id  number
503                      ,cp_hier_ver_id number) IS
504     select node_type, entity_id
505     from   per_gen_hierarchy_nodes
506     where  business_group_id    = cp_bus_grp_id
507     and    hierarchy_version_id = cp_hier_ver_id
508     and    node_type            in ( 'MX LEGAL EMPLOYER', 'MX GRE' );
509 
510   CURSOR c_node_exists( cp_bus_grp_id  number
511                        ,cp_node_type   varchar2
512                        ,cp_entity_id   varchar2
513                        ,cp_eff_date    date ) IS
514     select 1
515     from   per_gen_hierarchy_nodes pghn
516           ,per_gen_hierarchy_versions pghv
517           ,per_gen_hierarchy pgh
518     where pghn.business_group_id = cp_bus_grp_id
519     and   pghn.node_type = cp_node_type
520     and   pghn.entity_id = cp_entity_id
521     and   pghv.business_group_id = cp_bus_grp_id
522     and   pghv.hierarchy_version_id = pghn.hierarchy_version_id
523     and   cp_eff_date between pghv.date_from and nvl(pghv.date_to,cp_eff_date)
524     and   pghv.status = 'A'
525     and   pgh.business_group_id = cp_bus_grp_id
526     and   pgh.hierarchy_id = pghv.hierarchy_id
527     and   pgh.type = 'MEXICO HRMS';
528 
529     lv_hier_status  varchar2(240);
530     ln_bus_grp_id   number;
531 
532     ln_node_exists  number := 0;
533 
534   BEGIN
535 
536     hr_utility.trace('Entering: PER_MX_GEN_HIER_VALID.UPDATE_HIER_VERSIONS');
537     hr_utility.trace('P_HIERARCHY_VERSION_ID '||P_HIERARCHY_VERSION_ID);
538     hr_utility.trace('P_VERSION_NUMBER '||P_VERSION_NUMBER);
539     hr_utility.trace('P_DATE_FROM '||P_DATE_FROM);
540     hr_utility.trace('P_DATE_TO '||P_DATE_TO);
541     hr_utility.trace('P_STATUS '||P_STATUS);
542     hr_utility.trace('P_EFFECTIVE_DATE '||P_EFFECTIVE_DATE);
543 
544 
545     open  c_hier_status( P_HIERARCHY_VERSION_ID
546                         ,P_VERSION_NUMBER );
547     fetch c_hier_status into ln_bus_grp_id
548                             ,lv_hier_status;
549     close c_hier_status;
550 
551     hr_utility.trace('ln_bus_grp_id '||ln_bus_grp_id);
552     hr_utility.trace('lv_hier_status '||lv_hier_status);
553 
554     if lv_hier_status = 'I' and p_status = 'A' then
555 
556        for nd in c_get_nodes(ln_bus_grp_id, p_hierarchy_version_id)
557        loop
558 
559           open  c_node_exists( ln_bus_grp_id
560                               ,nd.node_type
561                               ,nd.entity_id
562                               ,p_date_from );
563           fetch c_node_exists into ln_node_exists;
564           close c_node_exists;
565 
566           hr_utility.trace('ln_node_exists '||ln_node_exists);
567 
568           IF ln_node_exists > 0 THEN
569              hr_utility.trace('Organization already exists in the hierarchy.');
570              --
571              fnd_message.set_name('PER', 'HR_MX_GENHIER_ND_EXST_IN_ACTIV');
572              fnd_message.raise_error;
573              --
574           END IF;
575 
576        end loop;
577     end if;
578 
579     hr_utility.trace('Leaving: PER_MX_GEN_HIER_VALID.UPDATE_HIER_VERSIONS');
580 
581   END update_hier_versions;
582 
583 END per_mx_gen_hier_valid;