1: package body ame_manager_final_handler as
2: /* $Header: ameemfha.pkb 120.3 2007/12/20 20:03:10 prasashe noship $ */
3: /* package variables */
4: approverCategories ame_util.charList;
5: managerFound boolean;
6: parametersCount integer;
7: parameterNumbers ame_util.idList;
8: parameters ame_util.stringList;
3: /* package variables */
4: approverCategories ame_util.charList;
5: managerFound boolean;
6: parametersCount integer;
7: parameterNumbers ame_util.idList;
8: parameters ame_util.stringList;
9: parameterSigns ame_util.charList;
10: ruleIds ame_util.idList;
11: ruleSatisfiedYN ame_util.charList;
4: approverCategories ame_util.charList;
5: managerFound boolean;
6: parametersCount integer;
7: parameterNumbers ame_util.idList;
8: parameters ame_util.stringList;
9: parameterSigns ame_util.charList;
10: ruleIds ame_util.idList;
11: ruleSatisfiedYN ame_util.charList;
12: threshholdJobLevel integer;
5: managerFound boolean;
6: parametersCount integer;
7: parameterNumbers ame_util.idList;
8: parameters ame_util.stringList;
9: parameterSigns ame_util.charList;
10: ruleIds ame_util.idList;
11: ruleSatisfiedYN ame_util.charList;
12: threshholdJobLevel integer;
13: topDogFound boolean;
6: parametersCount integer;
7: parameterNumbers ame_util.idList;
8: parameters ame_util.stringList;
9: parameterSigns ame_util.charList;
10: ruleIds ame_util.idList;
11: ruleSatisfiedYN ame_util.charList;
12: threshholdJobLevel integer;
13: topDogFound boolean;
14: topDogPersonId integer;
7: parameterNumbers ame_util.idList;
8: parameters ame_util.stringList;
9: parameterSigns ame_util.charList;
10: ruleIds ame_util.idList;
11: ruleSatisfiedYN ame_util.charList;
12: threshholdJobLevel integer;
13: topDogFound boolean;
14: topDogPersonId integer;
15: /* forward declarations */
39: sourceOut out nocopy varchar2,
40: hasFinalAuthorityYNOut out nocopy varchar2,
41: supervisorJobLevelOut out nocopy integer,
42: nextSupervisorIdOut out nocopy integer) as
43: category ame_util.charType;
44: errorCode integer;
45: errorMessage ame_util.longestStringType;
46: hasFinalAuthorityYN ame_util.charType;
47: noSupervisorException exception;
41: supervisorJobLevelOut out nocopy integer,
42: nextSupervisorIdOut out nocopy integer) as
43: category ame_util.charType;
44: errorCode integer;
45: errorMessage ame_util.longestStringType;
46: hasFinalAuthorityYN ame_util.charType;
47: noSupervisorException exception;
48: personDisplayName ame_util.longStringType;
49: source ame_util.longStringType;
42: nextSupervisorIdOut out nocopy integer) as
43: category ame_util.charType;
44: errorCode integer;
45: errorMessage ame_util.longestStringType;
46: hasFinalAuthorityYN ame_util.charType;
47: noSupervisorException exception;
48: personDisplayName ame_util.longStringType;
49: source ame_util.longStringType;
50: supervisorJobLevel integer;
44: errorCode integer;
45: errorMessage ame_util.longestStringType;
46: hasFinalAuthorityYN ame_util.charType;
47: noSupervisorException exception;
48: personDisplayName ame_util.longStringType;
49: source ame_util.longStringType;
50: supervisorJobLevel integer;
51: tempRuleRequiresApprover boolean;
52: tempRuleSatisfied boolean;
45: errorMessage ame_util.longestStringType;
46: hasFinalAuthorityYN ame_util.charType;
47: noSupervisorException exception;
48: personDisplayName ame_util.longStringType;
49: source ame_util.longStringType;
50: supervisorJobLevel integer;
51: tempRuleRequiresApprover boolean;
52: tempRuleSatisfied boolean;
53: begin
71: B. Otherwise, the rule requires the input approver only if the approver
72: does <
73: that an approver satisfies a rule, but their supervisor has a lower
74: job level that does not satisfy the rule.)
75: 4. An approver's category is ame_util.approvalApproverCategory if any of the
76: rule usages requiring the approver is of that category; otherwise the
77: approver's category is ame_util.fyiApproverCategory.
78: */
79: category := ame_util.fyiApproverCategory;
73: that an approver satisfies a rule, but their supervisor has a lower
74: job level that does not satisfy the rule.)
75: 4. An approver's category is ame_util.approvalApproverCategory if any of the
76: rule usages requiring the approver is of that category; otherwise the
77: approver's category is ame_util.fyiApproverCategory.
78: */
79: category := ame_util.fyiApproverCategory;
80: hasFinalAuthorityYN := ame_util.booleanTrue;
81: for i in 1 .. parametersCount loop
75: 4. An approver's category is ame_util.approvalApproverCategory if any of the
76: rule usages requiring the approver is of that category; otherwise the
77: approver's category is ame_util.fyiApproverCategory.
78: */
79: category := ame_util.fyiApproverCategory;
80: hasFinalAuthorityYN := ame_util.booleanTrue;
81: for i in 1 .. parametersCount loop
82: /* Determine whether the approver satisfies the current rule. */
83: if(personIdIn = topDogPersonId) then
76: rule usages requiring the approver is of that category; otherwise the
77: approver's category is ame_util.fyiApproverCategory.
78: */
79: category := ame_util.fyiApproverCategory;
80: hasFinalAuthorityYN := ame_util.booleanTrue;
81: for i in 1 .. parametersCount loop
82: /* Determine whether the approver satisfies the current rule. */
83: if(personIdIn = topDogPersonId) then
84: tempRuleSatisfied := true;
106: end if;
107: end if;
108: /* Update hasFinalAuthorityYN as needed. */
109: if(not tempRuleSatisfied and
110: hasFinalAuthorityYN = ame_util.booleanTrue) then
111: hasFinalAuthorityYN := ame_util.booleanFalse;
112: end if;
113: /* Determine whether the current rule requires the approver. */
114: tempRuleRequiresApprover := false;
107: end if;
108: /* Update hasFinalAuthorityYN as needed. */
109: if(not tempRuleSatisfied and
110: hasFinalAuthorityYN = ame_util.booleanTrue) then
111: hasFinalAuthorityYN := ame_util.booleanFalse;
112: end if;
113: /* Determine whether the current rule requires the approver. */
114: tempRuleRequiresApprover := false;
115: if(ruleSatisfiedYN(i) = ame_util.booleanTrue) then
111: hasFinalAuthorityYN := ame_util.booleanFalse;
112: end if;
113: /* Determine whether the current rule requires the approver. */
114: tempRuleRequiresApprover := false;
115: if(ruleSatisfiedYN(i) = ame_util.booleanTrue) then
116: if(not tempRuleSatisfied) then
117: tempRuleRequiresApprover := true;
118: end if;
119: else
118: end if;
119: else
120: tempRuleRequiresApprover := true;
121: if(tempRuleSatisfied) then
122: ruleSatisfiedYN(i) := ame_util.booleanTrue;
123: end if;
124: end if;
125: if(tempRuleRequiresApprover) then
126: /* Update source. */
123: end if;
124: end if;
125: if(tempRuleRequiresApprover) then
126: /* Update source. */
127: ame_util.appendRuleIdToSource(ruleIdIn => ruleIds(i),
128: sourceInOut => source);
129: /* Update category as needed. */
130: if(category = ame_util.fyiApproverCategory and
131: approverCategories(i) = ame_util.approvalApproverCategory) then
126: /* Update source. */
127: ame_util.appendRuleIdToSource(ruleIdIn => ruleIds(i),
128: sourceInOut => source);
129: /* Update category as needed. */
130: if(category = ame_util.fyiApproverCategory and
131: approverCategories(i) = ame_util.approvalApproverCategory) then
132: category := ame_util.approvalApproverCategory;
133: end if;
134: end if;
127: ame_util.appendRuleIdToSource(ruleIdIn => ruleIds(i),
128: sourceInOut => source);
129: /* Update category as needed. */
130: if(category = ame_util.fyiApproverCategory and
131: approverCategories(i) = ame_util.approvalApproverCategory) then
132: category := ame_util.approvalApproverCategory;
133: end if;
134: end if;
135: end loop;
128: sourceInOut => source);
129: /* Update category as needed. */
130: if(category = ame_util.fyiApproverCategory and
131: approverCategories(i) = ame_util.approvalApproverCategory) then
132: category := ame_util.approvalApproverCategory;
133: end if;
134: end if;
135: end loop;
136: categoryOut := category;
138: sourceOut := source;
139: exception
140: when noSupervisorException then
141: personDisplayName := ame_approver_type_pkg.getApproverDisplayName2(
142: origSystemIn => ame_util.perOrigSystem,
143: origSystemIdIn => personIdIn );
144: errorCode := -20001;
145: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
146: messageNameIn => 'AME_400297_HAN_LACK_SPVR',
141: personDisplayName := ame_approver_type_pkg.getApproverDisplayName2(
142: origSystemIn => ame_util.perOrigSystem,
143: origSystemIdIn => personIdIn );
144: errorCode := -20001;
145: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
146: messageNameIn => 'AME_400297_HAN_LACK_SPVR',
147: tokenNameOneIn => 'FIRST_NAME',
148: tokenValueOneIn => personDisplayName,
149: tokenNameTwoIn => 'LAST_NAME',
149: tokenNameTwoIn => 'LAST_NAME',
150: tokenValueTwoIn => null ,
151: tokenNameThreeIn => 'OTHER_NAME',
152: tokenValueThreeIn => null );
153: ame_util.runtimeException(packageNameIn => 'ame_manager_final_handler',
154: routineNameIn => 'getCatSourceAndAuthority',
155: exceptionNumberIn => errorCode,
156: exceptionStringIn => errorMessage);
157: raise_application_error(errorCode,
159: when others then
160: categoryOut := null;
161: hasFinalAuthorityYNOut := null;
162: sourceOut := null;
163: ame_util.runtimeException(packageNameIn => 'ame_manager_final_handler',
164: routineNameIn => 'getCatSourceAndAuthority',
165: exceptionNumberIn => sqlcode,
166: exceptionStringIn => sqlerrm);
167: raise;
167: raise;
168: end getCatSourceAndAuthority;
169: procedure handler as
170: checkForInsertee boolean;
171: COAInsertee ame_util.approverRecord2;
172: errorCode integer;
173: errorMessage ame_util.longestStringType;
174: finalAuthorityApproverCategory ame_util.charType;
175: finalAuthorityFound boolean;
169: procedure handler as
170: checkForInsertee boolean;
171: COAInsertee ame_util.approverRecord2;
172: errorCode integer;
173: errorMessage ame_util.longestStringType;
174: finalAuthorityApproverCategory ame_util.charType;
175: finalAuthorityFound boolean;
176: finalAuthoritySource ame_util.longStringType;
177: firstApproverSource ame_util.longStringType;
170: checkForInsertee boolean;
171: COAInsertee ame_util.approverRecord2;
172: errorCode integer;
173: errorMessage ame_util.longestStringType;
174: finalAuthorityApproverCategory ame_util.charType;
175: finalAuthorityFound boolean;
176: finalAuthoritySource ame_util.longStringType;
177: firstApproverSource ame_util.longStringType;
178: includeAllJobLevelApprovers boolean;
172: errorCode integer;
173: errorMessage ame_util.longestStringType;
174: finalAuthorityApproverCategory ame_util.charType;
175: finalAuthorityFound boolean;
176: finalAuthoritySource ame_util.longStringType;
177: firstApproverSource ame_util.longStringType;
178: includeAllJobLevelApprovers boolean;
179: noSupervisorException exception;
180: nullFirstIdException exception;
173: errorMessage ame_util.longestStringType;
174: finalAuthorityApproverCategory ame_util.charType;
175: finalAuthorityFound boolean;
176: finalAuthoritySource ame_util.longStringType;
177: firstApproverSource ame_util.longStringType;
178: includeAllJobLevelApprovers boolean;
179: noSupervisorException exception;
180: nullFirstIdException exception;
181: personDisplayName ame_util.longStringType;
177: firstApproverSource ame_util.longStringType;
178: includeAllJobLevelApprovers boolean;
179: noSupervisorException exception;
180: nullFirstIdException exception;
181: personDisplayName ame_util.longStringType;
182: prevApprover ame_util.approverRecord2;
183: requestorId integer;
184: startingPointId integer;
185: tempApprover ame_util.approverRecord2;
178: includeAllJobLevelApprovers boolean;
179: noSupervisorException exception;
180: nullFirstIdException exception;
181: personDisplayName ame_util.longStringType;
182: prevApprover ame_util.approverRecord2;
183: requestorId integer;
184: startingPointId integer;
185: tempApprover ame_util.approverRecord2;
186: tempHasFinalAuthorityYN ame_util.charType;
181: personDisplayName ame_util.longStringType;
182: prevApprover ame_util.approverRecord2;
183: requestorId integer;
184: startingPointId integer;
185: tempApprover ame_util.approverRecord2;
186: tempHasFinalAuthorityYN ame_util.charType;
187: tempJobLevel integer;
188: tempMemberOrderNumber integer;
189: tempOldJobLevel integer;
182: prevApprover ame_util.approverRecord2;
183: requestorId integer;
184: startingPointId integer;
185: tempApprover ame_util.approverRecord2;
186: tempHasFinalAuthorityYN ame_util.charType;
187: tempJobLevel integer;
188: tempMemberOrderNumber integer;
189: tempOldJobLevel integer;
190: tempSupervisorId integer;
190: tempSupervisorId integer;
191: tempSupervisorJobLevel integer;
192: tempNextSupervisorId integer;
193: topDogRequestorException exception;
194: votingRegimeType ame_util.stringType;
195: firstAuthInsExists boolean := false;
196: coaInsAuthForward boolean := false;
197: begin
198: finalAuthorityApproverCategory := null;
197: begin
198: finalAuthorityApproverCategory := null;
199: finalAuthoritySource := null;
200: includeAllJobLevelApprovers :=
201: ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.includeAllApproversAttribute) =
202: ame_util.booleanAttributeTrue;
203: /* Populate some of the package variables. */
204: managerFound := false;
205: topDogPersonId := to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.topSupPersonIdAttribute));
198: finalAuthorityApproverCategory := null;
199: finalAuthoritySource := null;
200: includeAllJobLevelApprovers :=
201: ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.includeAllApproversAttribute) =
202: ame_util.booleanAttributeTrue;
203: /* Populate some of the package variables. */
204: managerFound := false;
205: topDogPersonId := to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.topSupPersonIdAttribute));
206: /* Set the fields in tempApprover that are constant for the entire handler cycle. */
201: ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.includeAllApproversAttribute) =
202: ame_util.booleanAttributeTrue;
203: /* Populate some of the package variables. */
204: managerFound := false;
205: topDogPersonId := to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.topSupPersonIdAttribute));
206: /* Set the fields in tempApprover that are constant for the entire handler cycle. */
207: tempApprover.orig_system := ame_util.perOrigSystem;
208: tempApprover.authority := ame_util.authorityApprover;
209: tempApprover.action_type_id := ame_engine.getHandlerActionTypeId;
203: /* Populate some of the package variables. */
204: managerFound := false;
205: topDogPersonId := to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.topSupPersonIdAttribute));
206: /* Set the fields in tempApprover that are constant for the entire handler cycle. */
207: tempApprover.orig_system := ame_util.perOrigSystem;
208: tempApprover.authority := ame_util.authorityApprover;
209: tempApprover.action_type_id := ame_engine.getHandlerActionTypeId;
210: tempApprover.item_class := ame_engine.getHandlerItemClassName;
211: tempApprover.item_id := ame_engine.getHandlerItemId;
204: managerFound := false;
205: topDogPersonId := to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.topSupPersonIdAttribute));
206: /* Set the fields in tempApprover that are constant for the entire handler cycle. */
207: tempApprover.orig_system := ame_util.perOrigSystem;
208: tempApprover.authority := ame_util.authorityApprover;
209: tempApprover.action_type_id := ame_engine.getHandlerActionTypeId;
210: tempApprover.item_class := ame_engine.getHandlerItemClassName;
211: tempApprover.item_id := ame_engine.getHandlerItemId;
212: tempApprover.item_class_order_number := ame_engine.getHandlerItemClassOrderNumber;
237: sourceOut => COAInsertee.source);
238: if COAInsertee.name is null then
239: /* Fetch some of the required attributes. */
240: startingPointId :=
241: to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.jobLevelStartingPointAttribute));
242: if(startingPointId is null) then
243: requestorId :=
244: to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.transactionRequestorAttribute));
245: if (requestorId is null) then
240: startingPointId :=
241: to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.jobLevelStartingPointAttribute));
242: if(startingPointId is null) then
243: requestorId :=
244: to_number(ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.transactionRequestorAttribute));
245: if (requestorId is null) then
246: raise nullFirstIdException;
247: end if;
248: tempApprover.orig_system_id := requestorId;
248: tempApprover.orig_system_id := requestorId;
249: else
250: tempApprover.orig_system_id := startingPointId;
251: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
252: origSystemIn => ame_util.perOrigSystem,
253: origSystemIdIn => tempApprover.orig_system_id,
254: nameOut => tempApprover.name,
255: displayNameOut => tempApprover.display_name);
256: end if;
253: origSystemIdIn => tempApprover.orig_system_id,
254: nameOut => tempApprover.name,
255: displayNameOut => tempApprover.display_name);
256: end if;
257: tempApprover.api_insertion := ame_util.oamGenerated;
258: else
259: tempApprover.name := COAInsertee.name;
260: tempApprover.orig_system := COAInsertee.orig_system;
261: tempApprover.orig_system_id := COAInsertee.orig_system_id;
260: tempApprover.orig_system := COAInsertee.orig_system;
261: tempApprover.orig_system_id := COAInsertee.orig_system_id;
262: tempApprover.display_name := COAInsertee.display_name;
263: firstApproverSource := COAInsertee.source;
264: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
265: firstAuthInsExists := true;
266: end if;
267: /* The threshhold Job level is the job level of this tempApprover */
268: ame_absolute_job_level_handler.getJobLevelAndSupervisor(personIdIn => tempApprover.orig_system_id,
271: threshholdJobLevel := tempJobLevel;
272: parametersCount := parameters.count;
273: parseAndSortRules;
274: for i in 1 .. ruleIds.count loop
275: ruleSatisfiedYN(i) := ame_util.booleanFalse;
276: end loop;
277: /*
278: Check whether self-approval is allowed. If so, check whether there is a non-default
279: starting point or a COA firstAuthority approver. If not, check whether the requestor
283: */
284: if(COAInsertee.name is null and
285: startingPointId is null )
286: then
287: if (ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.allowAutoApprovalAttribute)
288: = ame_util.booleanAttributeTrue)
289: then
290: getCatSourceAndAuthority(personIdIn => requestorId,
291: jobLevelIn => tempJobLevel,
284: if(COAInsertee.name is null and
285: startingPointId is null )
286: then
287: if (ame_engine.getHeaderAttValue2(attributeNameIn => ame_util.allowAutoApprovalAttribute)
288: = ame_util.booleanAttributeTrue)
289: then
290: getCatSourceAndAuthority(personIdIn => requestorId,
291: jobLevelIn => tempJobLevel,
292: supervisorIdIn => tempSupervisorId,
294: sourceOut => tempApprover.source,
295: hasFinalAuthorityYNOut => tempHasFinalAuthorityYN,
296: supervisorJobLevelOut => tempSupervisorJobLevel,
297: nextSupervisorIdOut => tempNextSupervisorId);
298: if(tempHasFinalAuthorityYN = ame_util.booleanTrue) then
299: tempApprover.api_insertion := ame_util.oamGenerated;
300: tempApprover.orig_system_id := requestorId;
301: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
302: origSystemIn => ame_util.perOrigSystem,
295: hasFinalAuthorityYNOut => tempHasFinalAuthorityYN,
296: supervisorJobLevelOut => tempSupervisorJobLevel,
297: nextSupervisorIdOut => tempNextSupervisorId);
298: if(tempHasFinalAuthorityYN = ame_util.booleanTrue) then
299: tempApprover.api_insertion := ame_util.oamGenerated;
300: tempApprover.orig_system_id := requestorId;
301: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
302: origSystemIn => ame_util.perOrigSystem,
303: origSystemIdIn => tempApprover.orig_system_id,
298: if(tempHasFinalAuthorityYN = ame_util.booleanTrue) then
299: tempApprover.api_insertion := ame_util.oamGenerated;
300: tempApprover.orig_system_id := requestorId;
301: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
302: origSystemIn => ame_util.perOrigSystem,
303: origSystemIdIn => tempApprover.orig_system_id,
304: nameOut => tempApprover.name,
305: displayNameOut => tempApprover.display_name);
306: tempApprover.occurrence := ame_engine.getHandlerOccurrence(
309: itemIdIn => tempApprover.item_id,
310: actionTypeIdIn => tempApprover.action_type_id,
311: groupOrChainIdIn => tempApprover.group_or_chain_id);
312: tempApprover.member_order_number := 1;
313: tempApprover.approval_status := ame_util.approvedStatus;
314: ame_engine.addApprover(approverIn => tempApprover);
315: return;
316: end if;
317: end if;
326: else
327: tempApprover.orig_system_id := tempSupervisorId;
328: end if;
329: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
330: origSystemIn => ame_util.perOrigSystem,
331: origSystemIdIn => tempApprover.orig_system_id,
332: nameOut => tempApprover.name,
333: displayNameOut => tempApprover.display_name);
334: if tempSupervisorJobLevel is null then
340: tempJobLevel := tempSupervisorJobLevel;
341: end if;
342: end if;
343: /* Build the chain. */
344: prevApprover := ame_util.emptyApproverRecord2;
345: finalAuthorityFound := false;
346: tempMemberOrderNumber := 0; /* pre-increment */
347: loop
348: checkForInsertee := false;
359: tempApprover.source := firstApproverSource;
360: firstApproverSource := null;
361: end if;
362: if(not finalAuthorityFound and
363: tempHasFinalAuthorityYN = ame_util.booleanTrue) then
364: finalAuthorityFound := true;
365: finalAuthorityApproverCategory := tempApprover.approver_category;
366: finalAuthoritySource := tempApprover.source;
367: end if;
369: finalAuthoritySource is not null ) then
370: tempApprover.approver_category := finalAuthorityApproverCategory;
371: tempApprover.source := finalAuthoritySource;
372: end if;
373: tempApprover.api_insertion := ame_util.oamGenerated;
374: /* The engine will set tempApprover.approver_order_number; leave it null here. */
375: /* Decide whether to end the chain. */
376: if(topDogFound or
377: (finalAuthorityFound and
379: /*
380: The approver is the last approver in the chain. He should get inserted into the
381: approver List */
382: tempMemberOrderNumber := tempMemberOrderNumber + 1;
383: if(votingRegimeType = ame_util.serializedVoting) then
384: tempApprover.member_order_number := tempMemberOrderNumber;
385: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
386: tempApprover.member_order_number := 1;
387: end if;
381: approver List */
382: tempMemberOrderNumber := tempMemberOrderNumber + 1;
383: if(votingRegimeType = ame_util.serializedVoting) then
384: tempApprover.member_order_number := tempMemberOrderNumber;
385: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
386: tempApprover.member_order_number := 1;
387: end if;
388: checkForInsertee := true;
389: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
386: tempApprover.member_order_number := 1;
387: end if;
388: checkForInsertee := true;
389: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
390: origSystemIn => ame_util.perOrigSystem,
391: origSystemIdIn => tempApprover.orig_system_id,
392: nameOut => tempApprover.name,
393: displayNameOut => tempApprover.display_name);
394: tempApprover.occurrence := ame_engine.getHandlerOccurrence(nameIn => tempApprover.name,
416: /*
417: The approver was the last approver in the chain. He should get inserted
418: into the approver List */
419: tempMemberOrderNumber := tempMemberOrderNumber + 1;
420: if(votingRegimeType = ame_util.serializedVoting) then
421: tempApprover.member_order_number := tempMemberOrderNumber;
422: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
423: tempApprover.member_order_number := 1;
424: end if;
418: into the approver List */
419: tempMemberOrderNumber := tempMemberOrderNumber + 1;
420: if(votingRegimeType = ame_util.serializedVoting) then
421: tempApprover.member_order_number := tempMemberOrderNumber;
422: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
423: tempApprover.member_order_number := 1;
424: end if;
425: checkForInsertee := true;
426: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
423: tempApprover.member_order_number := 1;
424: end if;
425: checkForInsertee := true;
426: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
427: origSystemIn => ame_util.perOrigSystem,
428: origSystemIdIn => tempApprover.orig_system_id,
429: nameOut => tempApprover.name,
430: displayNameOut => tempApprover.display_name);
431: tempApprover.occurrence := ame_engine.getHandlerOccurrence(nameIn => tempApprover.name,
442: the approver is the manager, if yes insert the approver in the chain */
443: if not managerFound then
444: managerFound := true;
445: tempMemberOrderNumber := tempMemberOrderNumber + 1;
446: if(votingRegimeType = ame_util.serializedVoting) then
447: tempApprover.member_order_number := tempMemberOrderNumber;
448: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
449: tempApprover.member_order_number := 1;
450: end if;
444: managerFound := true;
445: tempMemberOrderNumber := tempMemberOrderNumber + 1;
446: if(votingRegimeType = ame_util.serializedVoting) then
447: tempApprover.member_order_number := tempMemberOrderNumber;
448: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
449: tempApprover.member_order_number := 1;
450: end if;
451: checkForInsertee := true;
452: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
449: tempApprover.member_order_number := 1;
450: end if;
451: checkForInsertee := true;
452: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
453: origSystemIn => ame_util.perOrigSystem,
454: origSystemIdIn => tempApprover.orig_system_id,
455: nameOut => tempApprover.name,
456: displayNameOut => tempApprover.display_name);
457: tempApprover.occurrence := ame_engine.getHandlerOccurrence(nameIn => tempApprover.name,
464: elsif (prevApprover.approver_category is not null and
465: tempApprover.approver_category <> prevApprover.approver_category ) then
466: managerFound := true;
467: tempMemberOrderNumber := tempMemberOrderNumber + 1;
468: if(votingRegimeType = ame_util.serializedVoting) then
469: prevApprover.member_order_number := tempMemberOrderNumber;
470: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
471: prevApprover.member_order_number := 1;
472: end if;
466: managerFound := true;
467: tempMemberOrderNumber := tempMemberOrderNumber + 1;
468: if(votingRegimeType = ame_util.serializedVoting) then
469: prevApprover.member_order_number := tempMemberOrderNumber;
470: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
471: prevApprover.member_order_number := 1;
472: end if;
473: checkForInsertee := true;
474: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
471: prevApprover.member_order_number := 1;
472: end if;
473: checkForInsertee := true;
474: ame_approver_type_pkg.getWfRolesNameAndDisplayName(
475: origSystemIn => ame_util.perOrigSystem,
476: origSystemIdIn => prevApprover.orig_system_id,
477: nameOut => prevApprover.name,
478: displayNameOut => prevApprover.display_name);
479: prevApprover.occurrence := ame_engine.getHandlerOccurrence(nameIn => prevApprover.name,
493: final authority will need to be done again. */
494: checkForInsertee := false;
495: loop
496: /* Initialize COAInsertee approverRecord2 */
497: COAInsertee := ame_util.emptyApproverRecord2;
498: /* Check if there are any COAInsertions */
499: ame_engine.getHandlerCOAInsertion(nameIn => tempApprover.name,
500: itemClassIn => tempApprover.item_class,
501: itemIdIn => tempApprover.item_id,
526: hasFinalAuthorityYNOut => tempHasFinalAuthorityYN,
527: supervisorJobLevelOut => tempSupervisorJobLevel,
528: nextSupervisorIdOut => tempNextSupervisorId);
529: tempApprover.source := COAInsertee.source;
530: tempApprover.approver_category := ame_util.approvalApproverCategory;
531: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
532: tempMemberOrderNumber := tempMemberOrderNumber + 1;
533: if(votingRegimeType = ame_util.serializedVoting) then
534: tempApprover.member_order_number := tempMemberOrderNumber;
527: supervisorJobLevelOut => tempSupervisorJobLevel,
528: nextSupervisorIdOut => tempNextSupervisorId);
529: tempApprover.source := COAInsertee.source;
530: tempApprover.approver_category := ame_util.approvalApproverCategory;
531: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
532: tempMemberOrderNumber := tempMemberOrderNumber + 1;
533: if(votingRegimeType = ame_util.serializedVoting) then
534: tempApprover.member_order_number := tempMemberOrderNumber;
535: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
529: tempApprover.source := COAInsertee.source;
530: tempApprover.approver_category := ame_util.approvalApproverCategory;
531: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
532: tempMemberOrderNumber := tempMemberOrderNumber + 1;
533: if(votingRegimeType = ame_util.serializedVoting) then
534: tempApprover.member_order_number := tempMemberOrderNumber;
535: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
536: tempApprover.member_order_number := 1;
537: end if;
531: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
532: tempMemberOrderNumber := tempMemberOrderNumber + 1;
533: if(votingRegimeType = ame_util.serializedVoting) then
534: tempApprover.member_order_number := tempMemberOrderNumber;
535: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
536: tempApprover.member_order_number := 1;
537: end if;
538: tempApprover.occurrence := ame_engine.getHandlerOccurrence(nameIn => tempApprover.name,
539: itemClassIn => tempApprover.item_class,
540: itemIdIn => tempApprover.item_id,
541: actionTypeIdIn => tempApprover.action_type_id,
542: groupOrChainIdIn => tempApprover.group_or_chain_id);
543: tempApprover.approval_status := ame_engine.getHandlerApprovalStatus(approverIn => tempApprover);
544: /* If approver has a status of ame_util.approve or ame_util.approveAndForwardStatus or
545: ame_util.nullStatus check to see if approver could have final authority */
546: if ((tempApprover.approval_status is null) or
547: (tempApprover.approval_status in
548: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
541: actionTypeIdIn => tempApprover.action_type_id,
542: groupOrChainIdIn => tempApprover.group_or_chain_id);
543: tempApprover.approval_status := ame_engine.getHandlerApprovalStatus(approverIn => tempApprover);
544: /* If approver has a status of ame_util.approve or ame_util.approveAndForwardStatus or
545: ame_util.nullStatus check to see if approver could have final authority */
546: if ((tempApprover.approval_status is null) or
547: (tempApprover.approval_status in
548: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
549: ame_util.repeatedStatus, ame_util.suppressedStatus,
544: /* If approver has a status of ame_util.approve or ame_util.approveAndForwardStatus or
545: ame_util.nullStatus check to see if approver could have final authority */
546: if ((tempApprover.approval_status is null) or
547: (tempApprover.approval_status in
548: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
549: ame_util.repeatedStatus, ame_util.suppressedStatus,
550: ame_util.beatByFirstResponderStatus, ame_util.nullStatus)) or
551: (tempApprover.approver_category = ame_util.approvalApproverCategory and
552: tempApprover.approval_status = ame_util.notifiedStatus) )
545: ame_util.nullStatus check to see if approver could have final authority */
546: if ((tempApprover.approval_status is null) or
547: (tempApprover.approval_status in
548: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
549: ame_util.repeatedStatus, ame_util.suppressedStatus,
550: ame_util.beatByFirstResponderStatus, ame_util.nullStatus)) or
551: (tempApprover.approver_category = ame_util.approvalApproverCategory and
552: tempApprover.approval_status = ame_util.notifiedStatus) )
553: then
546: if ((tempApprover.approval_status is null) or
547: (tempApprover.approval_status in
548: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
549: ame_util.repeatedStatus, ame_util.suppressedStatus,
550: ame_util.beatByFirstResponderStatus, ame_util.nullStatus)) or
551: (tempApprover.approver_category = ame_util.approvalApproverCategory and
552: tempApprover.approval_status = ame_util.notifiedStatus) )
553: then
554: if(not finalAuthorityFound and
547: (tempApprover.approval_status in
548: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
549: ame_util.repeatedStatus, ame_util.suppressedStatus,
550: ame_util.beatByFirstResponderStatus, ame_util.nullStatus)) or
551: (tempApprover.approver_category = ame_util.approvalApproverCategory and
552: tempApprover.approval_status = ame_util.notifiedStatus) )
553: then
554: if(not finalAuthorityFound and
555: tempHasFinalAuthorityYN = ame_util.booleanTrue) then
548: (ame_util.approvedStatus, ame_util.approveAndForwardStatus,
549: ame_util.repeatedStatus, ame_util.suppressedStatus,
550: ame_util.beatByFirstResponderStatus, ame_util.nullStatus)) or
551: (tempApprover.approver_category = ame_util.approvalApproverCategory and
552: tempApprover.approval_status = ame_util.notifiedStatus) )
553: then
554: if(not finalAuthorityFound and
555: tempHasFinalAuthorityYN = ame_util.booleanTrue) then
556: finalAuthorityFound := true;
551: (tempApprover.approver_category = ame_util.approvalApproverCategory and
552: tempApprover.approval_status = ame_util.notifiedStatus) )
553: then
554: if(not finalAuthorityFound and
555: tempHasFinalAuthorityYN = ame_util.booleanTrue) then
556: finalAuthorityFound := true;
557: end if;
558: end if;
559: ame_engine.addApprover(approverIn => tempApprover);
582: else
583: tempJobLevel := tempSupervisorJobLevel;
584: tempSupervisorId := tempNextSupervisorId;
585: end if;
586: ame_util.copyApproverRecord2(approverRecord2In => tempApprover,
587: approverRecord2Out => prevApprover);
588: if firstAuthInsExists then
589: ame_engine.setDeviationReasonDate(ame_approver_deviation_pkg.firstauthHandlerInsReason,null);
590: end if;
599: final authority will need to be done again. */
600: checkForInsertee := false;
601: loop
602: /* Initialize COAInsertee approverRecord2 */
603: COAInsertee := ame_util.emptyApproverRecord2;
604: /* Check if there are any COAInsertions */
605: ame_engine.getHandlerCOAInsertion(nameIn => tempApprover.name,
606: itemClassIn => tempApprover.item_class,
607: itemIdIn => tempApprover.item_id,
632: hasFinalAuthorityYNOut => tempHasFinalAuthorityYN,
633: supervisorJobLevelOut => tempSupervisorJobLevel,
634: nextSupervisorIdOut => tempNextSupervisorId);
635: tempApprover.source := COAInsertee.source;
636: tempApprover.approver_category := ame_util.approvalApproverCategory;
637: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
638: tempMemberOrderNumber := tempMemberOrderNumber + 1;
639: if(votingRegimeType = ame_util.serializedVoting) then
640: tempApprover.member_order_number := tempMemberOrderNumber;
633: supervisorJobLevelOut => tempSupervisorJobLevel,
634: nextSupervisorIdOut => tempNextSupervisorId);
635: tempApprover.source := COAInsertee.source;
636: tempApprover.approver_category := ame_util.approvalApproverCategory;
637: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
638: tempMemberOrderNumber := tempMemberOrderNumber + 1;
639: if(votingRegimeType = ame_util.serializedVoting) then
640: tempApprover.member_order_number := tempMemberOrderNumber;
641: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
635: tempApprover.source := COAInsertee.source;
636: tempApprover.approver_category := ame_util.approvalApproverCategory;
637: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
638: tempMemberOrderNumber := tempMemberOrderNumber + 1;
639: if(votingRegimeType = ame_util.serializedVoting) then
640: tempApprover.member_order_number := tempMemberOrderNumber;
641: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
642: tempApprover.member_order_number := 1;
643: end if;
637: tempApprover.api_insertion := ame_util.apiAuthorityInsertion;
638: tempMemberOrderNumber := tempMemberOrderNumber + 1;
639: if(votingRegimeType = ame_util.serializedVoting) then
640: tempApprover.member_order_number := tempMemberOrderNumber;
641: else /* votingRegimeType in (ame_util.consensusVoting, ame_util.firstApproverVoting) */
642: tempApprover.member_order_number := 1;
643: end if;
644: tempApprover.occurrence := ame_engine.getHandlerOccurrence(nameIn => tempApprover.name,
645: itemClassIn => tempApprover.item_class,
654: exception
655: when noSupervisorException then
656: if tempApprover.display_name is null then
657: personDisplayName := ame_approver_type_pkg.getApproverDisplayName2(
658: origSystemIn => ame_util.perOrigSystem,
659: origSystemIdIn => tempApprover.orig_system_id );
660: else
661: personDisplayName := tempApprover.display_name;
662: end if;
660: else
661: personDisplayName := tempApprover.display_name;
662: end if;
663: errorCode := -20001;
664: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
665: messageNameIn => 'AME_400297_HAN_LACK_SPVR',
666: tokenNameOneIn => 'FIRST_NAME',
667: tokenValueOneIn => personDisplayName,
668: tokenNameTwoIn => 'LAST_NAME',
668: tokenNameTwoIn => 'LAST_NAME',
669: tokenValueTwoIn => null ,
670: tokenNameThreeIn => 'OTHER_NAME',
671: tokenValueThreeIn => null );
672: ame_util.runtimeException(packageNameIn => 'ame_manager_final_handler',
673: routineNameIn => 'handler',
674: exceptionNumberIn => errorCode,
675: exceptionStringIn => errorMessage);
676: raise_application_error(errorCode,
677: errorMessage);
678: when nullFirstIdException then
679: errorCode := -20001;
680: errorMessage :=
681: ame_util.getMessage(applicationShortNameIn => 'PER',
682: messageNameIn => 'AME_400233_HAN_NO_TRANS_PER_ID');
683: ame_util.runtimeException(packageNameIn => 'ame_manager_final_handler',
684: routineNameIn => 'handler',
685: exceptionNumberIn => errorCode,
679: errorCode := -20001;
680: errorMessage :=
681: ame_util.getMessage(applicationShortNameIn => 'PER',
682: messageNameIn => 'AME_400233_HAN_NO_TRANS_PER_ID');
683: ame_util.runtimeException(packageNameIn => 'ame_manager_final_handler',
684: routineNameIn => 'handler',
685: exceptionNumberIn => errorCode,
686: exceptionStringIn => errorMessage);
687: raise_application_error(errorCode,
687: raise_application_error(errorCode,
688: errorMessage);
689: when topDogRequestorException then
690: errorCode := -20001;
691: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
692: messageNameIn => 'AME_400421_REQ_CANNOT_APPROVE');
693: ame_util.runtimeException(packageNameIn => 'ame_manager_final_handler',
694: routineNameIn => 'handler',
695: exceptionNumberIn => errorCode,
689: when topDogRequestorException then
690: errorCode := -20001;
691: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
692: messageNameIn => 'AME_400421_REQ_CANNOT_APPROVE');
693: ame_util.runtimeException(packageNameIn => 'ame_manager_final_handler',
694: routineNameIn => 'handler',
695: exceptionNumberIn => errorCode,
696: exceptionStringIn => errorMessage);
697: raise_application_error(errorCode,
696: exceptionStringIn => errorMessage);
697: raise_application_error(errorCode,
698: errorMessage);
699: when others then
700: ame_util.runtimeException(packageNameIn => 'ame_manager_final_handler',
701: routineNameIn => 'handler',
702: exceptionNumberIn => sqlcode,
703: exceptionStringIn => sqlerrm);
704: raise;
705: end handler;
706: procedure parseAndSortRules as
707: badParameterException exception;
708: errorCode integer;
709: errorMessage ame_util.longestStringType;
710: tempCategory ame_util.charType;
711: tempLength integer;
712: tempNumber integer;
713: tempRuleId integer;
706: procedure parseAndSortRules as
707: badParameterException exception;
708: errorCode integer;
709: errorMessage ame_util.longestStringType;
710: tempCategory ame_util.charType;
711: tempLength integer;
712: tempNumber integer;
713: tempRuleId integer;
714: tempSign ame_util.charType;
710: tempCategory ame_util.charType;
711: tempLength integer;
712: tempNumber integer;
713: tempRuleId integer;
714: tempSign ame_util.charType;
715: upperLimit integer;
716: begin
717: /* Parse. */
718: for i in 1 .. parametersCount loop
758: end loop;
759: exception
760: when badParameterException then
761: errorCode := -20001;
762: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
763: messageNameIn => 'AME_400234_HAN_ACT_PAR_SIGN');
764: ame_util.runtimeException(packageNameIn => 'ame_manager_final_handler',
765: routineNameIn => 'parseAndSortRules',
766: exceptionNumberIn => errorCode,
760: when badParameterException then
761: errorCode := -20001;
762: errorMessage := ame_util.getMessage(applicationShortNameIn => 'PER',
763: messageNameIn => 'AME_400234_HAN_ACT_PAR_SIGN');
764: ame_util.runtimeException(packageNameIn => 'ame_manager_final_handler',
765: routineNameIn => 'parseAndSortRules',
766: exceptionNumberIn => errorCode,
767: exceptionStringIn => errorMessage);
768: raise_application_error(errorCode,
767: exceptionStringIn => errorMessage);
768: raise_application_error(errorCode,
769: errorMessage);
770: when others then
771: ame_util.runtimeException(packageNameIn => 'ame_manager_final_handler',
772: routineNameIn => 'parseAndSortRules',
773: exceptionNumberIn => sqlcode,
774: exceptionStringIn => sqlerrm);
775: raise;