1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package org.kuali.kfs.fp.document.authorization;
20
21 import java.util.List;
22 import java.util.Map;
23 import java.util.Set;
24
25 import org.apache.commons.lang.StringUtils;
26 import org.kuali.kfs.fp.document.DisbursementVoucherConstants;
27 import org.kuali.kfs.fp.document.DisbursementVoucherDocument;
28 import org.kuali.kfs.sys.businessobject.AccountingLine;
29 import org.kuali.kfs.sys.document.authorization.AccountingDocumentAuthorizerBase;
30 import org.kuali.kfs.sys.identity.KfsKimAttributes;
31 import org.kuali.rice.kew.api.WorkflowDocument;
32 import org.kuali.rice.kim.api.KimConstants;
33 import org.kuali.rice.kim.api.identity.Person;
34 import org.kuali.rice.krad.util.GlobalVariables;
35 import org.kuali.rice.krad.util.ObjectUtils;
36
37
38
39
40 public class DisbursementVoucherDocumentAuthorizer extends AccountingDocumentAuthorizerBase {
41
42
43
44
45
46 @Override
47 protected void addRoleQualification(Object dataObject, Map<String, String> attributes) {
48 super.addRoleQualification(dataObject, attributes);
49 final DisbursementVoucherDocument disbursementVoucherDocument = (DisbursementVoucherDocument)dataObject;
50
51
52 if (isAtAccountLevel(disbursementVoucherDocument)) {
53 addAccountQualification(getAccountingLines(disbursementVoucherDocument), attributes);
54 }
55
56
57 if (!StringUtils.isBlank(disbursementVoucherDocument.getCampusCode())) {
58 attributes.put(KimConstants.AttributeConstants.CAMPUS_CODE, disbursementVoucherDocument.getCampusCode());
59 }
60 }
61
62
63
64
65
66
67 protected List<? extends AccountingLine> getAccountingLines(DisbursementVoucherDocument disbursementVoucherDocument) {
68 return disbursementVoucherDocument.getSourceAccountingLines();
69 }
70
71
72
73
74
75
76
77 protected void addAccountQualification(List<? extends AccountingLine> accountingLines, Map<String, String> attributes) {
78 final Person currentUser = GlobalVariables.getUserSession().getPerson();
79 boolean foundQualification = false;
80 int count = 0;
81 while (!foundQualification && count < accountingLines.size()) {
82 AccountingLine accountingLine = accountingLines.get(count);
83 if (ObjectUtils.isNull(accountingLine.getAccount())) {
84 accountingLine.refreshReferenceObject("account");
85 }
86 if (!ObjectUtils.isNull(accountingLine.getAccount()) && currentUser.getPrincipalId().equalsIgnoreCase(accountingLine.getAccount().getAccountFiscalOfficerSystemIdentifier())) {
87 attributes.put(KfsKimAttributes.CHART_OF_ACCOUNTS_CODE, accountingLine.getChartOfAccountsCode());
88 attributes.put(KfsKimAttributes.ACCOUNT_NUMBER, accountingLine.getAccountNumber());
89 foundQualification = true;
90 }
91 count += 1;
92 }
93 }
94
95
96
97
98
99
100
101 protected Set<String> getCurrentRouteLevels(WorkflowDocument workflowDocument) {
102 return workflowDocument.getCurrentNodeNames();
103 }
104
105
106
107
108
109
110 protected boolean isAtAccountLevel(DisbursementVoucherDocument disbursementVoucherDocument) {
111 final WorkflowDocument workflowDocument = disbursementVoucherDocument.getDocumentHeader().getWorkflowDocument();
112
113 return getCurrentRouteLevels(workflowDocument).contains(DisbursementVoucherConstants.RouteLevelNames.ACCOUNT);
114 }
115 }