1: package body ame_dual_chains_handler as
2: /* $Header: ameedcha.pkb 120.6 2011/05/18 11:29:15 nchinnam ship $ */
3: /* package variables */
4: approverCategoriesDual ame_util.charList;
5: approverCategories ame_util.charList;
6: parametersCount integer;
7: parameterNumbers ame_util.idList;
8: parameters ame_util.stringList;
1: package body ame_dual_chains_handler as
2: /* $Header: ameedcha.pkb 120.6 2011/05/18 11:29:15 nchinnam ship $ */
3: /* package variables */
4: approverCategoriesDual ame_util.charList;
5: approverCategories ame_util.charList;
6: parametersCount integer;
7: parameterNumbers ame_util.idList;
8: parameters ame_util.stringList;
9: parameterSigns ame_util.charList;
3: /* package variables */
4: approverCategoriesDual ame_util.charList;
5: approverCategories ame_util.charList;
6: parametersCount integer;
7: parameterNumbers ame_util.idList;
8: parameters ame_util.stringList;
9: parameterSigns ame_util.charList;
10: ruleIds ame_util.idList;
11: ruleIdsDual ame_util.idList;
4: approverCategoriesDual ame_util.charList;
5: approverCategories ame_util.charList;
6: parametersCount integer;
7: parameterNumbers ame_util.idList;
8: parameters ame_util.stringList;
9: parameterSigns ame_util.charList;
10: ruleIds ame_util.idList;
11: ruleIdsDual ame_util.idList;
12: ruleSatisfiedYN ame_util.charList;
5: approverCategories ame_util.charList;
6: parametersCount integer;
7: parameterNumbers ame_util.idList;
8: parameters ame_util.stringList;
9: parameterSigns ame_util.charList;
10: ruleIds ame_util.idList;
11: ruleIdsDual ame_util.idList;
12: ruleSatisfiedYN ame_util.charList;
13: threshholdJobLevel integer;
6: parametersCount integer;
7: parameterNumbers ame_util.idList;
8: parameters ame_util.stringList;
9: parameterSigns ame_util.charList;
10: ruleIds ame_util.idList;
11: ruleIdsDual ame_util.idList;
12: ruleSatisfiedYN ame_util.charList;
13: threshholdJobLevel integer;
14: topDogFound boolean;
7: parameterNumbers ame_util.idList;
8: parameters ame_util.stringList;
9: parameterSigns ame_util.charList;
10: ruleIds ame_util.idList;
11: ruleIdsDual ame_util.idList;
12: ruleSatisfiedYN ame_util.charList;
13: threshholdJobLevel integer;
14: topDogFound boolean;
15: topDogPersonId integer;
8: parameters ame_util.stringList;
9: parameterSigns ame_util.charList;
10: ruleIds ame_util.idList;
11: ruleIdsDual ame_util.idList;
12: ruleSatisfiedYN ame_util.charList;
13: threshholdJobLevel integer;
14: topDogFound boolean;
15: topDogPersonId integer;
16: /* forward declarations */
40: sourceOut out nocopy varchar2,
41: hasFinalAuthorityYNOut out nocopy varchar2,
42: supervisorJobLevelOut out nocopy integer,
43: nextSupervisorIdOut out nocopy integer) as
44: category ame_util.charType;
45: errorCode integer;
46: errorMessage ame_util.longestStringType;
47: hasFinalAuthorityYN ame_util.charType;
48: noSupervisorException exception;
42: supervisorJobLevelOut out nocopy integer,
43: nextSupervisorIdOut out nocopy integer) as
44: category ame_util.charType;
45: errorCode integer;
46: errorMessage ame_util.longestStringType;
47: hasFinalAuthorityYN ame_util.charType;
48: noSupervisorException exception;
49: personDisplayName ame_util.longStringType;
50: source ame_util.longStringType;
43: nextSupervisorIdOut out nocopy integer) as
44: category ame_util.charType;
45: errorCode integer;
46: errorMessage ame_util.longestStringType;
47: hasFinalAuthorityYN ame_util.charType;
48: noSupervisorException exception;
49: personDisplayName ame_util.longStringType;
50: source ame_util.longStringType;
51: supervisorJobLevel integer;
45: errorCode integer;
46: errorMessage ame_util.longestStringType;
47: hasFinalAuthorityYN ame_util.charType;
48: noSupervisorException exception;
49: personDisplayName ame_util.longStringType;
50: source ame_util.longStringType;
51: supervisorJobLevel integer;
52: tempRuleRequiresApprover boolean;
53: tempRuleSatisfied boolean;
46: errorMessage ame_util.longestStringType;
47: hasFinalAuthorityYN ame_util.charType;
48: noSupervisorException exception;
49: personDisplayName ame_util.longStringType;
50: source ame_util.longStringType;
51: supervisorJobLevel integer;
52: tempRuleRequiresApprover boolean;
53: tempRuleSatisfied boolean;
54: begin
72: B. Otherwise, the rule requires the input approver only if the approver
73: does <
74: that an approver satisfies a rule, but their supervisor has a lower
75: job level that does not satisfy the rule.)
76: 4. An approver's category is ame_util.approvalApproverCategory if any of the
77: rule usages requiring the approver is of that category; otherwise the
78: approver's category is ame_util.fyiApproverCategory.
79: */
80: category := ame_util.fyiApproverCategory;
74: that an approver satisfies a rule, but their supervisor has a lower
75: job level that does not satisfy the rule.)
76: 4. An approver's category is ame_util.approvalApproverCategory if any of the
77: rule usages requiring the approver is of that category; otherwise the
78: approver's category is ame_util.fyiApproverCategory.
79: */
80: category := ame_util.fyiApproverCategory;
81: hasFinalAuthorityYN := ame_util.booleanTrue;
82: for i in 1 .. parameterNumbers.count loop
76: 4. An approver's category is ame_util.approvalApproverCategory if any of the
77: rule usages requiring the approver is of that category; otherwise the
78: approver's category is ame_util.fyiApproverCategory.
79: */
80: category := ame_util.fyiApproverCategory;
81: hasFinalAuthorityYN := ame_util.booleanTrue;
82: for i in 1 .. parameterNumbers.count loop
83: /* Determine whether the approver satisfies the current rule. */
84: if(personIdIn = topDogPersonId) then
77: rule usages requiring the approver is of that category; otherwise the
78: approver's category is ame_util.fyiApproverCategory.
79: */
80: category := ame_util.fyiApproverCategory;
81: hasFinalAuthorityYN := ame_util.booleanTrue;
82: for i in 1 .. parameterNumbers.count loop
83: /* Determine whether the approver satisfies the current rule. */
84: if(personIdIn = topDogPersonId) then
85: topDogFound := true;
109: end if;
110: end if;
111: /* Update hasFinalAuthorityYN as needed. */
112: if(not tempRuleSatisfied and
113: hasFinalAuthorityYN = ame_util.booleanTrue) then
114: hasFinalAuthorityYN := ame_util.booleanFalse;
115: end if;
116: /* Determine whether the current rule requires the approver. */
117: tempRuleRequiresApprover := false;
110: end if;
111: /* Update hasFinalAuthorityYN as needed. */
112: if(not tempRuleSatisfied and
113: hasFinalAuthorityYN = ame_util.booleanTrue) then
114: hasFinalAuthorityYN := ame_util.booleanFalse;
115: end if;
116: /* Determine whether the current rule requires the approver. */
117: tempRuleRequiresApprover := false;
118: if(ruleSatisfiedYN(i) = ame_util.booleanTrue) then
114: hasFinalAuthorityYN := ame_util.booleanFalse;
115: end if;
116: /* Determine whether the current rule requires the approver. */
117: tempRuleRequiresApprover := false;
118: if(ruleSatisfiedYN(i) = ame_util.booleanTrue) then
119: if(not tempRuleSatisfied) then
120: tempRuleRequiresApprover := true;
121: end if;
122: else
121: end if;
122: else
123: tempRuleRequiresApprover := true;
124: if(tempRuleSatisfied) then
125: ruleSatisfiedYN(i) := ame_util.booleanTrue;
126: end if;
127: end if;
128: if(tempRuleRequiresApprover) then
129: /* Update source. */
126: end if;
127: end if;
128: if(tempRuleRequiresApprover) then
129: /* Update source. */
130: ame_util.appendRuleIdToSource(ruleIdIn => ruleIds(i),
131: sourceInOut => source);
132: /* Update category as needed. */
133: if(category = ame_util.fyiApproverCategory and
134: approverCategories(i) = ame_util.approvalApproverCategory) then
129: /* Update source. */
130: ame_util.appendRuleIdToSource(ruleIdIn => ruleIds(i),
131: sourceInOut => source);
132: /* Update category as needed. */
133: if(category = ame_util.fyiApproverCategory and
134: approverCategories(i) = ame_util.approvalApproverCategory) then
135: category := ame_util.approvalApproverCategory;
136: end if;
137: end if;
130: ame_util.appendRuleIdToSource(ruleIdIn => ruleIds(i),
131: sourceInOut => source);
132: /* Update category as needed. */
133: if(category = ame_util.fyiApproverCategory and
134: approverCategories(i) = ame_util.approvalApproverCategory) then
135: category := ame_util.approvalApproverCategory;
136: end if;
137: end if;
138: end loop;
131: sourceInOut => source);
132: /* Update category as needed. */
133: if(category = ame_util.fyiApproverCategory and
134: approverCategories(i) = ame_util.approvalApproverCategory) then
135: category := ame_util.approvalApproverCategory;
136: end if;
137: end if;
138: end loop;
139: categoryOut := category;
141: sourceOut := source;
142: exception
143: when noSupervisorException then
144: personDisplayName := ame_approver_type_pkg.getApproverDisplayName2(
145: origSystemIn => ame_util.perOrigSystem,
146: origSystemIdIn => personIdIn );
147: errorCode := -20205;
148: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
149: messageNameIn => 'AME_400297_HAN_LACK_SPVR',
144: personDisplayName := ame_approver_type_pkg.getApproverDisplayName2(
145: origSystemIn => ame_util.perOrigSystem,
146: origSystemIdIn => personIdIn );
147: errorCode := -20205;
148: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
149: messageNameIn => 'AME_400297_HAN_LACK_SPVR',
150: tokenNameOneIn => 'FIRST_NAME',
151: tokenValueOneIn => personDisplayName,
152: tokenNameTwoIn => 'LAST_NAME',
152: tokenNameTwoIn => 'LAST_NAME',
153: tokenValueTwoIn => null ,
154: tokenNameThreeIn => 'OTHER_NAME',
155: tokenValueThreeIn => null );
156: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
157: routineNameIn => 'getCatSourceAndAuthority',
158: exceptionNumberIn => errorCode,
159: exceptionStringIn => errorMessage);
160: raise_application_error(errorCode,
162: when others then
163: categoryOut := null;
164: hasFinalAuthorityYNOut := null;
165: sourceOut := null;
166: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
167: routineNameIn => 'getCatSourceAndAuthority',
168: exceptionNumberIn => sqlcode,
169: exceptionStringIn => sqlerrm);
170: raise;
169: exceptionStringIn => sqlerrm);
170: raise;
171: end getCatSourceAndAuthority;
172: procedure handler as
173: chainOrderMode ame_util.stringType;
174: COAInsertee ame_util.approverRecord2;
175: errorCode integer;
176: errorMessage ame_util.longestStringType;
177: finalAuthorityApproverCategory ame_util.charType;
170: raise;
171: end getCatSourceAndAuthority;
172: procedure handler as
173: chainOrderMode ame_util.stringType;
174: COAInsertee ame_util.approverRecord2;
175: errorCode integer;
176: errorMessage ame_util.longestStringType;
177: finalAuthorityApproverCategory ame_util.charType;
178: finalAuthorityFound boolean;
172: procedure handler as
173: chainOrderMode ame_util.stringType;
174: COAInsertee ame_util.approverRecord2;
175: errorCode integer;
176: errorMessage ame_util.longestStringType;
177: finalAuthorityApproverCategory ame_util.charType;
178: finalAuthorityFound boolean;
179: finalAuthoritySource ame_util.longStringType;
180: firstApproverSource ame_util.longStringType;
173: chainOrderMode ame_util.stringType;
174: COAInsertee ame_util.approverRecord2;
175: errorCode integer;
176: errorMessage ame_util.longestStringType;
177: finalAuthorityApproverCategory ame_util.charType;
178: finalAuthorityFound boolean;
179: finalAuthoritySource ame_util.longStringType;
180: firstApproverSource ame_util.longStringType;
181: includeAllJobLevelApprovers boolean;
175: errorCode integer;
176: errorMessage ame_util.longestStringType;
177: finalAuthorityApproverCategory ame_util.charType;
178: finalAuthorityFound boolean;
179: finalAuthoritySource ame_util.longStringType;
180: firstApproverSource ame_util.longStringType;
181: includeAllJobLevelApprovers boolean;
182: noSupervisorException exception;
183: nullFirstIdException exception;
176: errorMessage ame_util.longestStringType;
177: finalAuthorityApproverCategory ame_util.charType;
178: finalAuthorityFound boolean;
179: finalAuthoritySource ame_util.longStringType;
180: firstApproverSource ame_util.longStringType;
181: includeAllJobLevelApprovers boolean;
182: noSupervisorException exception;
183: nullFirstIdException exception;
184: nullSecondIdException exception;
183: nullFirstIdException exception;
184: nullSecondIdException exception;
185: firstStartingPointId integer;
186: oneChainException exception;
187: personDisplayName ame_util.longStringType;
188: secondStartingPointId integer;
189: tempApprover ame_util.approverRecord2;
190: tempHasFinalAuthorityYN ame_util.charType;
191: tempJobLevel integer;
185: firstStartingPointId integer;
186: oneChainException exception;
187: personDisplayName ame_util.longStringType;
188: secondStartingPointId integer;
189: tempApprover ame_util.approverRecord2;
190: tempHasFinalAuthorityYN ame_util.charType;
191: tempJobLevel integer;
192: tempMemberOrderNumber integer;
193: tempOldJobLevel integer;
186: oneChainException exception;
187: personDisplayName ame_util.longStringType;
188: secondStartingPointId integer;
189: tempApprover ame_util.approverRecord2;
190: tempHasFinalAuthorityYN ame_util.charType;
191: tempJobLevel integer;
192: tempMemberOrderNumber integer;
193: tempOldJobLevel integer;
194: tempSupervisorId integer;
193: tempOldJobLevel integer;
194: tempSupervisorId integer;
195: tempSupervisorJobLevel integer;
196: tempNextSupervisorId integer;
197: votingRegimeType ame_util.stringType;
198: firstAuthInsExists boolean := false;
199: coaInsAuthForward boolean := false;
200: l_error_code number;
201: begin
199: coaInsAuthForward boolean := false;
200: l_error_code number;
201: begin
202: includeAllJobLevelApprovers :=
203: ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.includeAllApproversAttribute) =
204: ame_util.booleanAttributeTrue;
205: /* Populate some of the package variables. */
206: topDogPersonId := to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.topSupPersonIdAttribute));
207: /* Set the fields in tempApprover that are constant for the entire handler cycle. */
200: l_error_code number;
201: begin
202: includeAllJobLevelApprovers :=
203: ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.includeAllApproversAttribute) =
204: ame_util.booleanAttributeTrue;
205: /* Populate some of the package variables. */
206: topDogPersonId := to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.topSupPersonIdAttribute));
207: /* Set the fields in tempApprover that are constant for the entire handler cycle. */
208: tempApprover.orig_system := ame_util.perOrigSystem;
202: includeAllJobLevelApprovers :=
203: ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.includeAllApproversAttribute) =
204: ame_util.booleanAttributeTrue;
205: /* Populate some of the package variables. */
206: topDogPersonId := to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.topSupPersonIdAttribute));
207: /* Set the fields in tempApprover that are constant for the entire handler cycle. */
208: tempApprover.orig_system := ame_util.perOrigSystem;
209: tempApprover.authority := ame_util.authorityApprover;
210: tempApprover.action_type_id := ame_engine.getHandlerActionTypeId;
204: ame_util.booleanAttributeTrue;
205: /* Populate some of the package variables. */
206: topDogPersonId := to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.topSupPersonIdAttribute));
207: /* Set the fields in tempApprover that are constant for the entire handler cycle. */
208: tempApprover.orig_system := ame_util.perOrigSystem;
209: tempApprover.authority := ame_util.authorityApprover;
210: tempApprover.action_type_id := ame_engine.getHandlerActionTypeId;
211: tempApprover.item_class := ame_engine.getHandlerItemClassName;
212: tempApprover.item_id := ame_engine.getHandlerItemId;
205: /* Populate some of the package variables. */
206: topDogPersonId := to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.topSupPersonIdAttribute));
207: /* Set the fields in tempApprover that are constant for the entire handler cycle. */
208: tempApprover.orig_system := ame_util.perOrigSystem;
209: tempApprover.authority := ame_util.authorityApprover;
210: tempApprover.action_type_id := ame_engine.getHandlerActionTypeId;
211: tempApprover.item_class := ame_engine.getHandlerItemClassName;
212: tempApprover.item_id := ame_engine.getHandlerItemId;
213: tempApprover.item_class_order_number := ame_engine.getHandlerItemClassOrderNumber;
246: if chainCounter = 1 then
247: /* Fetch the required attributes. */
248: firstStartingPointId :=
249: to_number(ame_engine.getHeaderAttValue2(attributeNameIn =>
250: ame_util.firstStartingPointAttribute));
251: if(firstStartingPointId is null ) then
252: raise nullFirstIdException;
253: end if;
254: tempApprover.orig_system_id := firstStartingPointId;
255: else /* Chain is 2*/
256: /* Fetch the required attributes. */
257: secondStartingPointId :=
258: to_number(ame_engine.getHeaderAttValue2(attributeNameIn =>
259: ame_util.secondStartingPointAttribute));
260: if( secondStartingPointId is null) then
261: raise nullSecondIdException;
262: end if;
263: tempApprover.orig_system_id :=secondStartingPointId ;
261: raise nullSecondIdException;
262: end if;
263: tempApprover.orig_system_id :=secondStartingPointId ;
264: end if;
265: tempApprover.api_insertion := ame_util.oamGenerated;
266: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
267: origSystemIn => ame_util.perOrigSystem,
268: origSystemIdIn => tempApprover.orig_system_id,
269: nameOut => tempApprover.name,
263: tempApprover.orig_system_id :=secondStartingPointId ;
264: end if;
265: tempApprover.api_insertion := ame_util.oamGenerated;
266: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
267: origSystemIn => ame_util.perOrigSystem,
268: origSystemIdIn => tempApprover.orig_system_id,
269: nameOut => tempApprover.name,
270: displayNameOut => tempApprover.display_name);
271: else
273: tempApprover.orig_system := COAInsertee.orig_system;
274: tempApprover.orig_system_id := COAInsertee.orig_system_id;
275: tempApprover.display_name := COAInsertee.display_name;
276: firstApproverSource := COAInsertee.source;
277: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
278: firstAuthInsExists := true;
279: end if;
280: /* Get the threshholdJobLevel to convert parameters to absolute values */
281: ame_absolute_job_level_handler.getJobLevelAndSupervisor(
288: if parameterNumbers.count = 0 then
289: raise oneChainException;
290: end if;
291: for i in 1 .. parameterNumbers.count loop
292: ruleSatisfiedYN(i) := ame_util.booleanFalse;
293: end loop;
294: tempApprover.group_or_chain_id := chainCounter;
295: if (chainOrderMode = ame_util.serialChainsMode) then
296: tempApprover.group_or_chain_order_number := chainCounter;
291: for i in 1 .. parameterNumbers.count loop
292: ruleSatisfiedYN(i) := ame_util.booleanFalse;
293: end loop;
294: tempApprover.group_or_chain_id := chainCounter;
295: if (chainOrderMode = ame_util.serialChainsMode) then
296: tempApprover.group_or_chain_order_number := chainCounter;
297: else /* chain Order Mode is parallel */
298: tempApprover.group_or_chain_order_number := 1;
299: end if;
315: tempApprover.source := firstApproverSource;
316: firstApproverSource := null;
317: end if;
318: if(not finalAuthorityFound and
319: tempHasFinalAuthorityYN = ame_util.booleanTrue) then
320: finalAuthorityFound := true;
321: finalAuthorityApproverCategory := tempApprover.approver_category;
322: finalAuthoritySource := tempApprover.source;
323: end if;
332: actionTypeIdIn => tempApprover.action_type_id,
333: groupOrChainIdIn => tempApprover.group_or_chain_id);
334:
335: tempMemberOrderNumber := tempMemberOrderNumber + 1;
336: if(votingRegimeType = ame_util.serializedVoting) then
337: tempApprover.member_order_number := tempMemberOrderNumber;
338: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
339: tempApprover.member_order_number := 1;
340: end if;
334:
335: tempMemberOrderNumber := tempMemberOrderNumber + 1;
336: if(votingRegimeType = ame_util.serializedVoting) then
337: tempApprover.member_order_number := tempMemberOrderNumber;
338: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
339: tempApprover.member_order_number := 1;
340: end if;
341: tempApprover.approval_status := ame_engine.getHandlerApprovalStatus(approverIn => tempApprover);
342: /* The engine will set tempApprover.approver_order_number; leave it null here. */
345: insertion is found, keep checking till no more COA insertions. The check
346: for final authority will need to be done again. */
347: loop
348: /* Initialize COAInsertee approverRecord2 */
349: COAInsertee := ame_util.emptyApproverRecord2;
350: /* Check if there are any COAInsertions */
351: ame_engine.getHandlerCOAInsertion(nameIn => tempApprover.name,
352: itemClassIn => tempApprover.item_class,
353: itemIdIn => tempApprover.item_id,
379: hasFinalAuthorityYNOut => tempHasFinalAuthorityYN,
380: supervisorJobLevelOut => tempSupervisorJobLevel,
381: nextSupervisorIdOut => tempNextSupervisorId);
382: tempApprover.source := COAInsertee.source;
383: tempApprover.approver_category := ame_util.approvalApproverCategory;
384: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
385: tempMemberOrderNumber := tempMemberOrderNumber + 1;
386: if(votingRegimeType = ame_util.serializedVoting) then
387: tempApprover.member_order_number := tempMemberOrderNumber;
380: supervisorJobLevelOut => tempSupervisorJobLevel,
381: nextSupervisorIdOut => tempNextSupervisorId);
382: tempApprover.source := COAInsertee.source;
383: tempApprover.approver_category := ame_util.approvalApproverCategory;
384: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
385: tempMemberOrderNumber := tempMemberOrderNumber + 1;
386: if(votingRegimeType = ame_util.serializedVoting) then
387: tempApprover.member_order_number := tempMemberOrderNumber;
388: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
382: tempApprover.source := COAInsertee.source;
383: tempApprover.approver_category := ame_util.approvalApproverCategory;
384: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
385: tempMemberOrderNumber := tempMemberOrderNumber + 1;
386: if(votingRegimeType = ame_util.serializedVoting) then
387: tempApprover.member_order_number := tempMemberOrderNumber;
388: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
389: tempApprover.member_order_number := 1;
390: end if;
384: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
385: tempMemberOrderNumber := tempMemberOrderNumber + 1;
386: if(votingRegimeType = ame_util.serializedVoting) then
387: tempApprover.member_order_number := tempMemberOrderNumber;
388: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
389: tempApprover.member_order_number := 1;
390: end if;
391: tempApprover.occurrence := ame_engine.getHandlerOccurrence(nameIn => tempApprover.name,
392: itemClassIn => tempApprover.item_class,
393: itemIdIn => tempApprover.item_id,
394: actionTypeIdIn => tempApprover.action_type_id,
395: groupOrChainIdIn => tempApprover.group_or_chain_id);
396: tempApprover.approval_status := ame_engine.getHandlerApprovalStatus(approverIn => tempApprover);
397: /* If approver has a status of ame_util.approve or ame_util.approveAndForwardStatus or
398: ame_util.nullStatus check to see if approver could have final authority */
399: if ((tempApprover.approval_status is null) or
400: (tempApprover.approval_status in
401: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
394: actionTypeIdIn => tempApprover.action_type_id,
395: groupOrChainIdIn => tempApprover.group_or_chain_id);
396: tempApprover.approval_status := ame_engine.getHandlerApprovalStatus(approverIn => tempApprover);
397: /* If approver has a status of ame_util.approve or ame_util.approveAndForwardStatus or
398: ame_util.nullStatus check to see if approver could have final authority */
399: if ((tempApprover.approval_status is null) or
400: (tempApprover.approval_status in
401: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
402: ame_util.repeatedStatus, ame_util.suppressedStatus,
397: /* If approver has a status of ame_util.approve or ame_util.approveAndForwardStatus or
398: ame_util.nullStatus check to see if approver could have final authority */
399: if ((tempApprover.approval_status is null) or
400: (tempApprover.approval_status in
401: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
402: ame_util.repeatedStatus, ame_util.suppressedStatus,
403: ame_util.beatByFirstResponderStatus, ame_util.nullStatus)) or
404: (tempApprover.approver_category = ame_util.approvalApproverCategory and
405: tempApprover.approval_status = ame_util.notifiedStatus) )
398: ame_util.nullStatus check to see if approver could have final authority */
399: if ((tempApprover.approval_status is null) or
400: (tempApprover.approval_status in
401: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
402: ame_util.repeatedStatus, ame_util.suppressedStatus,
403: ame_util.beatByFirstResponderStatus, ame_util.nullStatus)) or
404: (tempApprover.approver_category = ame_util.approvalApproverCategory and
405: tempApprover.approval_status = ame_util.notifiedStatus) )
406: then
399: if ((tempApprover.approval_status is null) or
400: (tempApprover.approval_status in
401: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
402: ame_util.repeatedStatus, ame_util.suppressedStatus,
403: ame_util.beatByFirstResponderStatus, ame_util.nullStatus)) or
404: (tempApprover.approver_category = ame_util.approvalApproverCategory and
405: tempApprover.approval_status = ame_util.notifiedStatus) )
406: then
407: if(not finalAuthorityFound and
400: (tempApprover.approval_status in
401: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
402: ame_util.repeatedStatus, ame_util.suppressedStatus,
403: ame_util.beatByFirstResponderStatus, ame_util.nullStatus)) or
404: (tempApprover.approver_category = ame_util.approvalApproverCategory and
405: tempApprover.approval_status = ame_util.notifiedStatus) )
406: then
407: if(not finalAuthorityFound and
408: tempHasFinalAuthorityYN = ame_util.booleanTrue) then
401: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
402: ame_util.repeatedStatus, ame_util.suppressedStatus,
403: ame_util.beatByFirstResponderStatus, ame_util.nullStatus)) or
404: (tempApprover.approver_category = ame_util.approvalApproverCategory and
405: tempApprover.approval_status = ame_util.notifiedStatus) )
406: then
407: if(not finalAuthorityFound and
408: tempHasFinalAuthorityYN = ame_util.booleanTrue) then
409: finalAuthorityFound := true;
404: (tempApprover.approver_category = ame_util.approvalApproverCategory and
405: tempApprover.approval_status = ame_util.notifiedStatus) )
406: then
407: if(not finalAuthorityFound and
408: tempHasFinalAuthorityYN = ame_util.booleanTrue) then
409: finalAuthorityFound := true;
410: end if;
411: end if;
412: ame_engine.addApprover(approverIn => tempApprover);
441: if(finalAuthorityFound and
442: tempOldJobLevel <> tempJobLevel) then
443: exit;
444: end if;
445: tempApprover.api_insertion := ame_util.oamGenerated;
446: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
447: origSystemIn => ame_util.perOrigSystem,
448: origSystemIdIn => tempApprover.orig_system_id,
449: nameOut => tempApprover.name,
443: exit;
444: end if;
445: tempApprover.api_insertion := ame_util.oamGenerated;
446: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
447: origSystemIn => ame_util.perOrigSystem,
448: origSystemIdIn => tempApprover.orig_system_id,
449: nameOut => tempApprover.name,
450: displayNameOut => tempApprover.display_name);
451: if firstAuthInsExists then
458: end loop;
459: exception
460: when oneChainException then
461: errorCode := -20001;
462: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
463: messageNameIn => 'AME_400253_HAN_ONE_CHN_REQ');
464: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
465: routineNameIn => 'handler',
466: exceptionNumberIn => errorCode,
460: when oneChainException then
461: errorCode := -20001;
462: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
463: messageNameIn => 'AME_400253_HAN_ONE_CHN_REQ');
464: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
465: routineNameIn => 'handler',
466: exceptionNumberIn => errorCode,
467: exceptionStringIn => errorMessage);
468: raise_application_error(errorCode,
469: errorMessage);
470: when noSupervisorException then
471: if tempApprover.display_name is null then
472: personDisplayName := ame_approver_type_pkg.getApproverDisplayName2(
473: origSystemIn => ame_util.perOrigSystem,
474: origSystemIdIn => tempApprover.orig_system_id );
475: else
476: personDisplayName := tempApprover.display_name;
477: end if;
475: else
476: personDisplayName := tempApprover.display_name;
477: end if;
478: errorCode := -20205;
479: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
480: messageNameIn => 'AME_400297_HAN_LACK_SPVR',
481: tokenNameOneIn => 'FIRST_NAME',
482: tokenValueOneIn => personDisplayName,
483: tokenNameTwoIn => 'LAST_NAME',
483: tokenNameTwoIn => 'LAST_NAME',
484: tokenValueTwoIn => null ,
485: tokenNameThreeIn => 'OTHER_NAME',
486: tokenValueThreeIn => null );
487: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
488: routineNameIn => 'handler',
489: exceptionNumberIn => errorCode,
490: exceptionStringIn => errorMessage);
491: raise_application_error(errorCode,
492: errorMessage);
493: when nullFirstIdException then
494: errorCode := -20001;
495: errorMessage :=
496: ame_util.getMessage(applicationShortNameIn => 'PER',
497: messageNameIn => 'AME_400250_HAN_NULL_FRST_STRT',
498: tokenNameOneIn => 'STARTING_POINT_ATTRIBUTE',
499: tokenValueOneIn => ame_util.firstStartingPointAttribute);
500: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
495: errorMessage :=
496: ame_util.getMessage(applicationShortNameIn => 'PER',
497: messageNameIn => 'AME_400250_HAN_NULL_FRST_STRT',
498: tokenNameOneIn => 'STARTING_POINT_ATTRIBUTE',
499: tokenValueOneIn => ame_util.firstStartingPointAttribute);
500: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
501: routineNameIn => 'handler',
502: exceptionNumberIn => errorCode,
503: exceptionStringIn => errorMessage);
496: ame_util.getMessage(applicationShortNameIn => 'PER',
497: messageNameIn => 'AME_400250_HAN_NULL_FRST_STRT',
498: tokenNameOneIn => 'STARTING_POINT_ATTRIBUTE',
499: tokenValueOneIn => ame_util.firstStartingPointAttribute);
500: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
501: routineNameIn => 'handler',
502: exceptionNumberIn => errorCode,
503: exceptionStringIn => errorMessage);
504: raise_application_error(errorCode,
505: errorMessage);
506: when nullSecondIdException then
507: errorCode := -20001;
508: errorMessage :=
509: ame_util.getMessage(applicationShortNameIn => 'PER',
510: messageNameIn => 'AME_400250_HAN_NULL_FRST_STRT',
511: tokenNameOneIn => 'STARTING_POINT_ATTRIBUTE',
512: tokenValueOneIn => ame_util.secondStartingPointAttribute);
513: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
508: errorMessage :=
509: ame_util.getMessage(applicationShortNameIn => 'PER',
510: messageNameIn => 'AME_400250_HAN_NULL_FRST_STRT',
511: tokenNameOneIn => 'STARTING_POINT_ATTRIBUTE',
512: tokenValueOneIn => ame_util.secondStartingPointAttribute);
513: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
514: routineNameIn => 'handler',
515: exceptionNumberIn => errorCode,
516: exceptionStringIn => errorMessage);
509: ame_util.getMessage(applicationShortNameIn => 'PER',
510: messageNameIn => 'AME_400250_HAN_NULL_FRST_STRT',
511: tokenNameOneIn => 'STARTING_POINT_ATTRIBUTE',
512: tokenValueOneIn => ame_util.secondStartingPointAttribute);
513: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
514: routineNameIn => 'handler',
515: exceptionNumberIn => errorCode,
516: exceptionStringIn => errorMessage);
517: raise_application_error(errorCode,
516: exceptionStringIn => errorMessage);
517: raise_application_error(errorCode,
518: errorMessage);
519: when others then
520: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
521: routineNameIn => 'handler',
522: exceptionNumberIn => sqlcode,
523: exceptionStringIn => sqlerrm);
524: l_error_code := sqlcode;
522: exceptionNumberIn => sqlcode,
523: exceptionStringIn => sqlerrm);
524: l_error_code := sqlcode;
525: if l_error_code = -20213 then
526: errorMessage := ame_util.getMessage(applicationShortNameIn =>'PER',
527: messageNameIn => 'AME_400834_INV_HANDLR_APR',
528: tokenNameOneIn => 'ACTION_TYPE_NAME',
529: tokenValueOneIn => ame_engine.getActionTypeName(tempApprover.action_type_id),
530: tokenNameTwoIn => 'ORIG_SYSTEM',
527: messageNameIn => 'AME_400834_INV_HANDLR_APR',
528: tokenNameOneIn => 'ACTION_TYPE_NAME',
529: tokenValueOneIn => ame_engine.getActionTypeName(tempApprover.action_type_id),
530: tokenNameTwoIn => 'ORIG_SYSTEM',
531: tokenValueTwoIn => ame_util.perOrigSystem,
532: tokenNameThreeIn => 'ORIG_SYSEM_ID',
533: tokenValueThreeIn => tempApprover.orig_system_id);
534: raise_application_error(errorCode,errorMessage);
535: end if;
537: end handler;
538: procedure parseAndSortRules(chainNumIn in integer) as
539: badParameterException exception;
540: errorCode integer;
541: errorMessage ame_util.longestStringType;
542: tempCategory ame_util.charType;
543: tempIndex integer;
544: tempLength integer;
545: tempNumber integer;
538: procedure parseAndSortRules(chainNumIn in integer) as
539: badParameterException exception;
540: errorCode integer;
541: errorMessage ame_util.longestStringType;
542: tempCategory ame_util.charType;
543: tempIndex integer;
544: tempLength integer;
545: tempNumber integer;
546: tempRuleId integer;
543: tempIndex integer;
544: tempLength integer;
545: tempNumber integer;
546: tempRuleId integer;
547: tempSign ame_util.charType;
548: upperLimit integer;
549: begin
550: /* Parse. */
551: tempIndex := 0;
616: end loop;
617: exception
618: when badParameterException then
619: errorCode := -20001;
620: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
621: messageNameIn => 'AME_400234_HAN_ACT_PAR_SIGN');
622: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
623: routineNameIn => 'parseAndSortRules',
624: exceptionNumberIn => errorCode,
618: when badParameterException then
619: errorCode := -20001;
620: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
621: messageNameIn => 'AME_400234_HAN_ACT_PAR_SIGN');
622: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
623: routineNameIn => 'parseAndSortRules',
624: exceptionNumberIn => errorCode,
625: exceptionStringIn => errorMessage);
626: raise_application_error(errorCode,
625: exceptionStringIn => errorMessage);
626: raise_application_error(errorCode,
627: errorMessage);
628: when others then
629: ame_util.runtimeException(packageNameIn => 'ame_dual_chains_handler',
630: routineNameIn => 'parseAndSortRules',
631: exceptionNumberIn => sqlcode,
632: exceptionStringIn => sqlerrm);
633: raise;