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;