DBA Data[Home] [Help]

PACKAGE BODY: APPS.AME_SEED_UTILITY

Source


1 package BODY AME_SEED_UTILITY as
2 /* $Header: ameseedutility.pkb 120.5 2008/04/11 05:29:46 prasashe noship $ */
3   procedure INIT_AME_INSTALLATION_LEVEL as
4   begin
5    AME_INSTALLATION_LEVEL := FND_PROFILE.VALUE('AME_INSTALLATION_LEVEL');
6   end INIT_AME_INSTALLATION_LEVEL;
7 
8   function OWNER_AS_STRING
9     (X_LAST_UPDATED_BY   in number
10     ) return varchar2 as
11   begin
12     return FND_LOAD_UTIL.OWNER_NAME(X_LAST_UPDATED_BY);
13   end OWNER_AS_STRING;
14 
15   function OWNER_AS_INTEGER
16     (X_LAST_UPDATED_BY   in varchar2
17     ) return number as
18   begin
19     return FND_LOAD_UTIL.OWNER_ID(X_LAST_UPDATED_BY);
20   end OWNER_AS_INTEGER;
21 
22   function DATE_AS_STRING
23     (X_LAST_UPDATE_DATE  in date
24     ) return varchar2 as
25   begin
26     return to_char(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS');
27   end DATE_AS_STRING;
28 
29   function DATE_AS_DATE
30     (X_LAST_UPDATE_DATE  in varchar2
31     ) return date as
32   begin
33     return to_date(X_LAST_UPDATE_DATE,'YYYY/MM/DD HH24:MI:SS');
34   end DATE_AS_DATE;
35 
36   function IS_SEED_USER
37     (X_USER    in VARCHAR2
38     ) return boolean as
39     L_USER_ID INTEGER;
40   begin
41     L_USER_ID := FND_LOAD_UTIL.OWNER_ID(X_USER);
42     if L_USER_ID in (1,2,120,121) then
43       return true;
44     else
45       return false;
46     end if;
47   end IS_SEED_USER;
48 
49   function SEED_USER_ID return integer as
50   begin
51     return 1;
52   end SEED_USER_ID;
53 
54   function SEED_USER_NAME return varchar2 as
55   begin
56     return FND_LOAD_UTIL.OWNER_NAME(1);
57   end SEED_USER_NAME;
58 
59   function MERGE_ROW_TEST
60     (X_CURRENT_OWNER              in number
61     ,X_CURRENT_LAST_UPDATE_DATE   in varchar2
62     ,X_OWNER                      in number
63     ,X_LAST_UPDATE_DATE           in varchar2
64     ,X_CUSTOM_MODE                in varchar2
65     ) return boolean as
66   begin
67     if X_CUSTOM_MODE = 'FORCE' then
68       return true;
69     end if;
70     if X_LAST_UPDATE_DATE = X_CURRENT_LAST_UPDATE_DATE then
71       return false;
72     end if;
73     return FND_LOAD_UTIL.UPLOAD_TEST
74       (P_FILE_ID              => X_OWNER
75       ,P_FILE_LUD             => DATE_AS_DATE     (X_LAST_UPDATE_DATE)
76       ,P_DB_ID                => X_CURRENT_OWNER
77       ,P_DB_LUD               => DATE_AS_DATE     (X_CURRENT_LAST_UPDATE_DATE)
78       ,P_CUSTOM_MODE          => X_CUSTOM_MODE
79       );
80   end MERGE_ROW_TEST;
81 
82   function TL_MERGE_ROW_TEST
83     (X_CURRENT_OWNER              in number
84     ,X_CURRENT_LAST_UPDATE_DATE   in varchar2
85     ,X_OWNER                      in number
86     ,X_LAST_UPDATE_DATE           in varchar2
87     ,X_CUSTOM_MODE                in varchar2
88     ) return boolean as
89   begin
90     return FND_LOAD_UTIL.UPLOAD_TEST
91       (P_FILE_ID              => X_OWNER
92       ,P_FILE_LUD             => DATE_AS_DATE     (X_LAST_UPDATE_DATE)
93       ,P_DB_ID                => X_CURRENT_OWNER
94       ,P_DB_LUD               => DATE_AS_DATE     (X_CURRENT_LAST_UPDATE_DATE)
95       ,P_CUSTOM_MODE          => X_CUSTOM_MODE
96       );
97   end TL_MERGE_ROW_TEST;
98 
99   function GET_DEFAULT_END_DATE return date as
100   begin
101     INIT_AME_INSTALLATION_LEVEL;
102     if AME_INSTALLATION_LEVEL is not null and to_number(AME_INSTALLATION_LEVEL) >= 2 then
103       return END_OF_TIME;
104     else
105       return null;
106     end if;
107   end GET_DEFAULT_END_DATE;
108 
109   function CALCULATE_USE_COUNT(X_ATTRIBUTE_ID ame_attribute_usages.attribute_id%type
110                               ,X_APPLICATION_ID ame_attribute_usages.application_id%type) return integer as
111     cursor RULE_CURSOR(X_APPLICATION_ID  in integer) is
112     select  AME_RULE_USAGES.RULE_ID, AME_RULES.ACTION_ID
113       from AME_RULES, AME_RULE_USAGES
114      where AME_RULES.RULE_ID =  AME_RULE_USAGES.RULE_ID
115        and AME_RULE_USAGES.ITEM_ID = X_APPLICATION_ID
116        and ((sysdate between AME_RULES.START_DATE
117               and nvl(AME_RULES.END_DATE - (1/86400), sysdate))
118         or (sysdate < AME_RULES.START_DATE
119               and AME_RULES.START_DATE < nvl(AME_RULES.END_DATE,
120                             AME_RULES.START_DATE + (1/86400))))
121        and ((sysdate between AME_RULE_USAGES.START_DATE
122        and nvl(AME_RULE_USAGES.END_DATE - (1/86400), sysdate))
123         or (sysdate < AME_RULE_USAGES.START_DATE
124        and AME_RULE_USAGES.START_DATE < nvl(AME_RULE_USAGES.END_DATE,
125                             AME_RULE_USAGES.START_DATE + (1/86400))));
126       RULE_COUNT integer;
127       TEMP_COUNT integer;
128       NEW_USE_COUNT integer;
129   begin
130     NEW_USE_COUNT := 0;
131     for TEMPRULE in RULE_CURSOR(X_APPLICATION_ID => X_APPLICATION_ID) loop
132       select count(*)
133       into TEMP_COUNT
134       from AME_CONDITIONS,
135            AME_CONDITION_USAGES
136       where
137        AME_CONDITIONS.ATTRIBUTE_ID = X_ATTRIBUTE_ID and
138        AME_CONDITIONS.CONDITION_ID = AME_CONDITION_USAGES.CONDITION_ID and
139        AME_CONDITION_USAGES.RULE_ID = TEMPRULE.RULE_ID and
140        sysdate between AME_CONDITIONS.START_DATE and
141                  nvl(AME_CONDITIONS.END_DATE - (1/86400), sysdate) and
142        ((sysdate between AME_CONDITION_USAGES.START_DATE and
143              nvl(AME_CONDITION_USAGES.END_DATE - (1/86400), sysdate)) or
144         (sysdate < AME_CONDITION_USAGES.START_DATE and
145          AME_CONDITION_USAGES.START_DATE < nvl(AME_CONDITION_USAGES.END_DATE,
146                             AME_CONDITION_USAGES.START_DATE + (1/86400))));
147       if(TEMP_COUNT > 0) then
148         NEW_USE_COUNT := NEW_USE_COUNT + 1;
149       else
150         if(TEMPRULE.ACTION_ID is null) then
151            -- action_id is already migrated from ame_rules to ame_action_usages
152           select count(*)
153           into TEMP_COUNT
154           from
155             AME_MANDATORY_ATTRIBUTES,
156             AME_ACTIONS,
157             AME_ACTION_USAGES
158           where
159            AME_MANDATORY_ATTRIBUTES.ATTRIBUTE_ID = X_ATTRIBUTE_ID and
160            AME_MANDATORY_ATTRIBUTES.ACTION_TYPE_ID = AME_ACTIONS.ACTION_TYPE_ID and
161            AME_ACTIONS.ACTION_ID = AME_ACTION_USAGES.ACTION_ID and
162            AME_ACTION_USAGES.RULE_ID = TEMPRULE.RULE_ID and
163            sysdate between AME_MANDATORY_ATTRIBUTES.START_DATE and
164                      nvl(AME_MANDATORY_ATTRIBUTES.END_DATE - (1/86400), sysdate) and
165            sysdate between AME_ACTIONS.START_DATE and
166                      nvl(AME_ACTIONS.END_DATE - (1/86400), sysdate) and
167            ((sysdate between AME_ACTION_USAGES.START_DATE and
168                       nvl(AME_ACTION_USAGES.END_DATE - (1/86400), sysdate)) or
169             (sysdate < AME_ACTION_USAGES.START_DATE and
170              AME_ACTION_USAGES.START_DATE < nvl(AME_ACTION_USAGES.END_DATE,
171                                 AME_ACTION_USAGES.START_DATE + (1/86400))));
172         else
173           select count(*)
174           into TEMP_COUNT
175           from
176             AME_MANDATORY_ATTRIBUTES,
177             AME_ACTIONS,
178             AME_RULES
179           where
180            AME_MANDATORY_ATTRIBUTES.ATTRIBUTE_ID = X_ATTRIBUTE_ID and
181            AME_MANDATORY_ATTRIBUTES.ACTION_TYPE_ID = AME_ACTIONS.ACTION_TYPE_ID and
182            AME_ACTIONS.ACTION_ID = AME_RULES.ACTION_ID and
183            AME_RULES.RULE_ID = TEMPRULE.RULE_ID and
184            sysdate between AME_MANDATORY_ATTRIBUTES.START_DATE and
185                      nvl(AME_MANDATORY_ATTRIBUTES.END_DATE - (1/86400), sysdate) and
186            sysdate between AME_ACTIONS.START_DATE and
187                      nvl(AME_ACTIONS.END_DATE - (1/86400), sysdate) and
188            ((sysdate between AME_RULES.START_DATE and
189                       nvl(AME_RULES.END_DATE - (1/86400), sysdate)) or
190             (sysdate < AME_RULES.START_DATE and
191              AME_RULES.START_DATE < nvl(AME_RULES.END_DATE,
192                                 AME_RULES.START_DATE + (1/86400))));
193         end if;
194         if(TEMP_COUNT > 0) then
195            NEW_USE_COUNT := NEW_USE_COUNT + 1;
196         end if;
197       end if;
198     end loop;
199   return(NEW_USE_COUNT);
200   exception
201     when others then
202       ame_util.runtimeException('ame_seed_utility',
203                                 'calculate_use_count',
204                                 sqlcode,
205                                 sqlerrm);
206       raise;
207       return(null);
208   end CALCULATE_USE_COUNT;
209 
210   function MLS_ENABLED return boolean as
211   begin
212     INIT_AME_INSTALLATION_LEVEL;
213     if AME_INSTALLATION_LEVEL is not null and to_number(AME_INSTALLATION_LEVEL) >= 2 then
214       return true;
215     else
216       return false;
217     end if;
218   end MLS_ENABLED;
219 
220   function USER_ID_OF_SEED_USER return integer as
221   begin
222     return FND_LOAD_UTIL.OWNER_ID(P_NAME => SEED_USER_NAME);
223   end;
224 
225   procedure CHANGE_ATTRIBUTE_USAGES_COUNT(X_RULE_ID ame_rule_usages.rule_id%type
226                                          ,X_APPLICATION_ID ame_rule_usages.item_id%type) is
227     cursor GET_USED_ATTRIBUTES (X_RULE_ID ame_rule_usages.rule_id%type) is
228       select AME_CONDITIONS.ATTRIBUTE_ID
229       from  AME_CONDITIONS,
230         AME_CONDITION_USAGES
231       where
232         AME_CONDITIONS.CONDITION_TYPE in (AME_UTIL.ORDINARYCONDITIONTYPE,
233                                           AME_UTIL.EXCEPTIONCONDITIONTYPE) and
234         AME_CONDITION_USAGES.RULE_ID = X_RULE_ID and
235         AME_CONDITION_USAGES.CONDITION_ID = AME_CONDITIONS.CONDITION_ID and
236         (AME_CONDITIONS.START_DATE <= sysdate and
237           (AME_CONDITIONS.END_DATE is null or sysdate < AME_CONDITIONS.END_DATE)) and
238         ((sysdate between AME_CONDITION_USAGES.START_DATE and
239              nvl(AME_CONDITION_USAGES.END_DATE - (1/86400), sysdate)) or
240          (sysdate < AME_CONDITION_USAGES.START_DATE and
241           AME_CONDITION_USAGES.START_DATE < nvl(AME_CONDITION_USAGES.END_DATE,
242                            AME_CONDITION_USAGES.START_DATE + (1/86400))))
243         union
244         select AME_MANDATORY_ATTRIBUTES.ATTRIBUTE_ID
245         from AME_MANDATORY_ATTRIBUTES,
246          AME_ACTION_USAGES,
247          AME_ACTIONS
248         where
249          AME_MANDATORY_ATTRIBUTES.ACTION_TYPE_ID = AME_ACTIONS.ACTION_TYPE_ID and
250          AME_ACTIONS.ACTION_ID = AME_ACTION_USAGES.ACTION_ID and
251          AME_ACTION_USAGES.RULE_ID = X_RULE_ID and
252          (AME_MANDATORY_ATTRIBUTES.START_DATE <= sysdate and
253          (AME_MANDATORY_ATTRIBUTES.END_DATE is null or sysdate < AME_MANDATORY_ATTRIBUTES.END_DATE)) and
254          ((sysdate between AME_ACTION_USAGES.START_DATE and
255              nvl(AME_ACTION_USAGES.END_DATE - (1/86400), sysdate)) or
256            (sysdate < AME_ACTION_USAGES.START_DATE and
257            AME_ACTION_USAGES.START_DATE < nvl(AME_ACTION_USAGES.END_DATE,AME_ACTION_USAGES.START_DATE
258                                                    + (1/86400)))) and
259           (AME_ACTIONS.START_DATE <= sysdate and
260           (AME_ACTIONS.END_DATE is null or sysdate < AME_ACTIONS.END_DATE))
261         union
262         select AME_MANDATORY_ATTRIBUTES.ATTRIBUTE_ID
263         from AME_MANDATORY_ATTRIBUTES,
264          AME_RULES,
265          AME_ACTIONS
266         where
267          AME_MANDATORY_ATTRIBUTES.ACTION_TYPE_ID = AME_ACTIONS.ACTION_TYPE_ID and
268          AME_ACTIONS.ACTION_ID = AME_RULES.ACTION_ID and
272          (AME_MANDATORY_ATTRIBUTES.END_DATE is null or sysdate < AME_MANDATORY_ATTRIBUTES.END_DATE)) and
269          AME_RULES.ACTION_ID is not null and
270          AME_RULES.RULE_ID = X_RULE_ID and
271          (AME_MANDATORY_ATTRIBUTES.START_DATE <= sysdate and
273          ((sysdate between AME_RULES.START_DATE and
274              nvl(AME_RULES.END_DATE - (1/86400), sysdate)) or
275           (sysdate < AME_RULES.START_DATE and
276            AME_RULES.START_DATE < nvl(AME_RULES.END_DATE,AME_RULES.START_DATE
277                                                    + (1/86400)))) and
278           (AME_ACTIONS.START_DATE <= sysdate and
279           (AME_ACTIONS.END_DATE is null or sysdate < AME_ACTIONS.END_DATE));
280     ATTRIBUTE_IDS_LIST ame_util.idList;
281     X_USE_COUNT ame_attribute_usages.use_count%type;
282   begin
283     for ATTRIBUTE_REC in GET_USED_ATTRIBUTES(X_RULE_ID => X_RULE_ID) loop
284       -- calculate use count
285       X_USE_COUNT := CALCULATE_USE_COUNT(ATTRIBUTE_REC.ATTRIBUTE_ID, X_APPLICATION_ID);
286       -- update ame_attribute_usages
287       update AME_ATTRIBUTE_USAGES
288       set  USE_COUNT = X_USE_COUNT
289       where
290        ATTRIBUTE_ID = ATTRIBUTE_REC.ATTRIBUTE_ID and
291        APPLICATION_ID = X_APPLICATION_ID and
292        sysdate between START_DATE and
293                  nvl(END_DATE - (1/86400), sysdate);
294     end loop;
295   end CHANGE_ATTRIBUTE_USAGES_COUNT;
296 
297   PROCEDURE CREATE_PARALLEL_CONFIG
298     (X_ACTION_TYPE_ID IN INTEGER
299     ,X_ACTION_TYPE_NAME IN VARCHAR2
300     ,X_ACTION_ID IN INTEGER
301     ,X_APPROVAL_GROUP_ID IN INTEGER
302     ) AS
303     CURSOR GROUP_ACTION_TYPE_CURSOR IS
304       SELECT NULL
305         FROM AME_ACTION_TYPES
306        WHERE SYSDATE BETWEEN START_DATE AND NVL(END_DATE,SYSDATE)
307          AND ACTION_TYPE_ID = X_ACTION_TYPE_ID
308          AND NAME IN ('PRE-CHAIN-OF-AUTHORITY APPROVALS'
309                      ,'POST-CHAIN-OF-AUTHORITY APPROVALS'
310                      ,'APPROVAL-GROUP CHAIN OF AUTHORITY');
311     CURSOR APPLICATION_USING_RULE_CURSOR IS
312       SELECT DISTINCT
313              ACA.APPLICATION_ID,
314              ACA.START_DATE,
315              ACA.END_DATE,
316              ACA.CREATED_BY,
317              ACA.CREATION_DATE
318         FROM AME_CALLING_APPS ACA,
319              AME_RULES AR,
320              AME_RULE_USAGES ARU,
321              AME_ACTION_USAGES AAU
322        WHERE ACA.APPLICATION_ID = ARU.ITEM_ID
323          AND ARU.RULE_ID = AR.RULE_ID
324          AND AR.RULE_ID = AAU.RULE_ID
325          AND AAU.ACTION_ID = X_ACTION_ID
326          AND SYSDATE BETWEEN ACA.START_DATE AND NVL(ACA.END_DATE,SYSDATE)
327          AND (SYSDATE BETWEEN AR.START_DATE AND NVL(AR.END_DATE,SYSDATE) OR
328               AR.START_DATE > SYSDATE AND NVL(AR.END_DATE,AR.START_DATE + (1/86400)) < AR.START_DATE)
329          AND (SYSDATE BETWEEN ARU.START_DATE AND NVL(ARU.END_DATE,SYSDATE) OR
330               ARU.START_DATE > SYSDATE AND NVL(ARU.END_DATE,ARU.START_DATE + (1/86400)) < ARU.START_DATE)
331          AND (SYSDATE BETWEEN AAU.START_DATE AND NVL(AAU.END_DATE,SYSDATE) OR
332               AAU.START_DATE > SYSDATE AND NVL(AAU.END_DATE,AAU.START_DATE + (1/86400)) < AAU.START_DATE);
333     CURSOR MAX_AT_ORDER_NUMBER_CURSOR(C_APPLICATION_ID INTEGER) IS
334       SELECT MAX(ORDER_NUMBER) + 1
335         FROM AME_ACTION_TYPE_CONFIG
339       SELECT MAX(ORDER_NUMBER) + 1
336        WHERE APPLICATION_ID = C_APPLICATION_ID
337          AND SYSDATE BETWEEN START_DATE AND NVL(END_DATE,SYSDATE);
338     CURSOR MAX_AG_ORDER_NUMBER_CURSOR(C_APPLICATION_ID INTEGER) IS
340         FROM AME_APPROVAL_GROUP_CONFIG
341        WHERE APPLICATION_ID = C_APPLICATION_ID
342          AND SYSDATE BETWEEN START_DATE AND NVL(END_DATE,SYSDATE);
343     CURSOR COA_ACTION_TYPE_CURSOR IS
344       SELECT NULL
345         FROM AME_ACTION_TYPE_USAGES
346        WHERE ACTION_TYPE_ID = X_ACTION_TYPE_ID
347          AND SYSDATE BETWEEN START_DATE AND NVL(END_DATE,SYSDATE)
348          AND RULE_TYPE = AME_UTIL.AUTHORITYRULETYPE;
349     X_DUMMY VARCHAR2(10);
350     X_ORDER_NUMBER INTEGER;
351     X_GROUP_BASED_ACTION VARCHAR2(1);
352     X_VOTING_REGIME VARCHAR2(1);
353     X_ACTION_TYPE_ORDER_NUMBER INTEGER;
354     X_APPLICATION_ID INTEGER;
355     X_ACA_START_DATE DATE;
356     X_ACA_END_DATE DATE;
357     X_ACA_CREATED_BY INTEGER;
358     X_ACA_CREATION_DATE DATE;
359     LOCKHANDLE VARCHAR2(500);
360     RETURNVALUE INTEGER;
361   BEGIN
362     INIT_AME_INSTALLATION_LEVEL;
363     IF AME_INSTALLATION_LEVEL IS NULL OR TO_NUMBER(AME_INSTALLATION_LEVEL)  < 2 THEN
364       RETURN;
365     END IF;
366     OPEN COA_ACTION_TYPE_CURSOR;
367     FETCH COA_ACTION_TYPE_CURSOR INTO X_VOTING_REGIME;
368     IF COA_ACTION_TYPE_CURSOR%NOTFOUND THEN
369       X_VOTING_REGIME := NULL;
370     ELSE
371       X_VOTING_REGIME := AME_UTIL.SERIALIZEDVOTING;
372     END IF;
373     CLOSE COA_ACTION_TYPE_CURSOR;
374 
375     OPEN GROUP_ACTION_TYPE_CURSOR;
376     FETCH GROUP_ACTION_TYPE_CURSOR INTO X_DUMMY;
377     IF GROUP_ACTION_TYPE_CURSOR%FOUND THEN
378       X_GROUP_BASED_ACTION := 'Y';
379     ELSE
380       X_GROUP_BASED_ACTION := 'N';
381     END IF;
382     CLOSE GROUP_ACTION_TYPE_CURSOR;
383 
384     OPEN APPLICATION_USING_RULE_CURSOR;
385     LOOP
386       FETCH APPLICATION_USING_RULE_CURSOR
387        INTO X_APPLICATION_ID,
388             X_ACA_START_DATE,
389             X_ACA_END_DATE,
390             X_ACA_CREATED_BY,
391             X_ACA_CREATION_DATE;
392       EXIT WHEN APPLICATION_USING_RULE_CURSOR%NOTFOUND;
393       BEGIN
394         SELECT NULL
395           INTO X_DUMMY
396           FROM AME_ACTION_TYPE_CONFIG
397          WHERE ACTION_TYPE_ID = X_ACTION_TYPE_ID
398            AND APPLICATION_ID = X_APPLICATION_ID
399            AND SYSDATE BETWEEN START_DATE AND NVL(END_DATE,SYSDATE);
400       EXCEPTION
401         WHEN NO_DATA_FOUND THEN
402           OPEN MAX_AT_ORDER_NUMBER_CURSOR(X_APPLICATION_ID);
403           FETCH MAX_AT_ORDER_NUMBER_CURSOR INTO X_ORDER_NUMBER;
404           IF MAX_AT_ORDER_NUMBER_CURSOR%NOTFOUND THEN
405             X_ORDER_NUMBER := 1;
406           END IF;
407           CLOSE MAX_AT_ORDER_NUMBER_CURSOR;
408           IF X_ORDER_NUMBER IS NULL THEN
409             X_ORDER_NUMBER := 1;
410           END IF;
411           SELECT DECODE (X_ACTION_TYPE_NAME,
412                          AME_UTIL.PREAPPROVALTYPENAME, 1,
413                          AME_UTIL.DYNAMICPREAPPROVER, 2,
414                          AME_UTIL.ABSOLUTEJOBLEVELTYPENAME, 1,
415                          AME_UTIL.RELATIVEJOBLEVELTYPENAME, 2,
416                          AME_UTIL.SUPERVISORYLEVELTYPENAME, 3,
417                          AME_UTIL.POSITIONTYPENAME, 4,
421                          AME_UTIL.LINEITEMJOBLEVELTYPENAME, 8,
418                          AME_UTIL.POSITIONLEVELTYPENAME, 5,
419                          AME_UTIL.MANAGERFINALAPPROVERTYPENAME, 6,
420                          AME_UTIL.FINALAPPROVERONLYTYPENAME, 7,
422                          AME_UTIL.DUALCHAINSAUTHORITYTYPENAME, 9,
423                          AME_UTIL.GROUPCHAINAPPROVALTYPENAME, 10,
424                          AME_UTIL.NONFINALAUTHORITY, 1,
425                          AME_UTIL.FINALAUTHORITYTYPENAME, 2,
426                          AME_UTIL.SUBSTITUTIONTYPENAME, 1,
427                          AME_UTIL.POSTAPPROVALTYPENAME, 1,
428                          AME_UTIL.DYNAMICPOSTAPPROVER, 2,
429                          X_ORDER_NUMBER)
430             INTO X_ACTION_TYPE_ORDER_NUMBER
431             FROM DUAL;
432           DBMS_LOCK.ALLOCATE_UNIQUE (LOCKNAME =>'AME_ACTION_TYPE_CONFIG.'||X_APPLICATION_ID||X_ACTION_TYPE_ID
433                                      ,LOCKHANDLE => LOCKHANDLE);
434           RETURNVALUE := DBMS_LOCK.REQUEST(LOCKHANDLE => LOCKHANDLE,TIMEOUT => 0
435                                            ,RELEASE_ON_COMMIT => TRUE);
436           IF RETURNVALUE = 0  THEN
437             INSERT INTO AME_ACTION_TYPE_CONFIG
438               (APPLICATION_ID
439               ,ACTION_TYPE_ID
440               ,VOTING_REGIME
441               ,ORDER_NUMBER
442               ,CHAIN_ORDERING_MODE
443               ,START_DATE
444               ,END_DATE
445               ,CREATED_BY
446               ,CREATION_DATE
447               ,LAST_UPDATED_BY
448               ,LAST_UPDATE_DATE
449               ,LAST_UPDATE_LOGIN
450               ,OBJECT_VERSION_NUMBER
451               ) SELECT X_APPLICATION_ID
452                       ,X_ACTION_TYPE_ID
453                       ,X_VOTING_REGIME
454                       ,X_ACTION_TYPE_ORDER_NUMBER
455                       ,AME_UTIL.SERIALCHAINSMODE
456                       ,X_ACA_START_DATE
457                       ,X_ACA_END_DATE
458                       ,X_ACA_CREATED_BY
459                       ,X_ACA_CREATION_DATE
460                       ,X_ACA_CREATED_BY
461                       ,X_ACA_CREATION_DATE
462                       ,0
463                       ,1
464                  FROM DUAL
465                 WHERE NOT EXISTS (SELECT NULL
466                                     FROM AME_ACTION_TYPE_CONFIG
467                                    WHERE ACTION_TYPE_ID = X_ACTION_TYPE_ID
468                                      AND APPLICATION_ID = X_APPLICATION_ID
469                                      AND SYSDATE BETWEEN START_DATE AND NVL(END_DATE - (1/86400),SYSDATE));
470         END IF;
471       END;
472       IF X_GROUP_BASED_ACTION = 'Y' THEN
473         BEGIN
474           SELECT NULL
475             INTO X_DUMMY
476             FROM AME_APPROVAL_GROUP_CONFIG
477            WHERE SYSDATE BETWEEN START_DATE AND NVL(END_DATE,SYSDATE)
478              AND APPLICATION_ID = X_APPLICATION_ID
479              AND APPROVAL_GROUP_ID = X_APPROVAL_GROUP_ID;
480         EXCEPTION
481           WHEN NO_DATA_FOUND THEN
482             OPEN MAX_AG_ORDER_NUMBER_CURSOR(X_APPLICATION_ID);
483             FETCH MAX_AG_ORDER_NUMBER_CURSOR INTO X_ORDER_NUMBER;
484             IF MAX_AG_ORDER_NUMBER_CURSOR%NOTFOUND THEN
485               X_ORDER_NUMBER := 1;
486             END IF;
487             IF X_ORDER_NUMBER IS NULL THEN
488               X_ORDER_NUMBER := 1;
489             END IF;
490             CLOSE MAX_AG_ORDER_NUMBER_CURSOR;
491             DBMS_LOCK.ALLOCATE_UNIQUE (LOCKNAME =>'AME_APPROVAL_GROUP_CONFIG.'||X_APPLICATION_ID||X_APPROVAL_GROUP_ID
492                                        ,LOCKHANDLE => LOCKHANDLE);
493             RETURNVALUE := DBMS_LOCK.REQUEST(LOCKHANDLE => LOCKHANDLE,TIMEOUT => 0
494                                              ,RELEASE_ON_COMMIT => TRUE);
495             IF RETURNVALUE = 0  THEN
496               INSERT INTO AME_APPROVAL_GROUP_CONFIG
497                 (APPLICATION_ID
498                 ,APPROVAL_GROUP_ID
499                 ,VOTING_REGIME
500                 ,ORDER_NUMBER
501                 ,START_DATE
502                 ,END_DATE
503                 ,CREATED_BY
504                 ,CREATION_DATE
505                 ,LAST_UPDATED_BY
506                 ,LAST_UPDATE_DATE
507                 ,LAST_UPDATE_LOGIN
508                 ,OBJECT_VERSION_NUMBER
509                 ) SELECT X_APPLICATION_ID
510                         ,X_APPROVAL_GROUP_ID
511                         ,AME_UTIL.ORDERNUMBERVOTING
512                         ,X_ORDER_NUMBER
513                         ,X_ACA_START_DATE
514                         ,X_ACA_END_DATE
515                         ,X_ACA_CREATED_BY
516                         ,X_ACA_CREATION_DATE
517                         ,X_ACA_CREATED_BY
518                         ,X_ACA_CREATION_DATE
519                         ,0
520                         ,1
521                    FROM DUAL
522                   WHERE NOT EXISTS (SELECT NULL
523                                       FROM AME_APPROVAL_GROUP_CONFIG
524                                      WHERE APPROVAL_GROUP_ID = X_APPROVAL_GROUP_ID
525                                        AND APPLICATION_ID = X_APPLICATION_ID
526                                        AND SYSDATE BETWEEN START_DATE AND NVL(END_DATE - (1/86400),SYSDATE));
527           END IF;
528         END;
529       END IF;
530     END LOOP;
531     CLOSE APPLICATION_USING_RULE_CURSOR;
532   END CREATE_PARALLEL_CONFIG;
533 
534 end AME_SEED_UTILITY;