1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.kuali.ole.fp.document.authorization;
17  
18  import java.util.Map;
19  import java.util.Set;
20  
21  import org.apache.commons.lang.StringUtils;
22  import org.kuali.ole.sys.OLEConstants;
23  import org.kuali.ole.sys.OLEKeyConstants;
24  import org.kuali.ole.sys.businessobject.AccountingLine;
25  import org.kuali.ole.sys.context.SpringContext;
26  import org.kuali.ole.sys.document.AccountingDocument;
27  import org.kuali.ole.sys.document.authorization.AccountingLineAuthorizerBase;
28  import org.kuali.ole.sys.document.validation.impl.AccountingDocumentRuleBaseConstants.APPLICATION_PARAMETER;
29  import org.kuali.ole.sys.document.web.AccountingLineRenderingContext;
30  import org.kuali.ole.sys.document.web.AccountingLineViewAction;
31  import org.kuali.ole.sys.service.impl.OleParameterConstants;
32  import org.kuali.rice.core.api.parameter.ParameterEvaluator;
33  import org.kuali.rice.core.api.parameter.ParameterEvaluatorService;
34  import org.kuali.rice.coreservice.framework.parameter.ParameterService;
35  import org.kuali.rice.kim.api.identity.Person;
36  import org.kuali.rice.kns.service.DataDictionaryService;
37  
38  
39  
40  
41  public class FinancialProcessingAccountingLineAuthorizer extends AccountingLineAuthorizerBase {
42      private final static String SALES_TAX_DOCUMENT_TYPES_PARAMETER_NAME = "SALES_TAX_APPLICABLE_DOCUMENT_TYPES";
43      private final static String SALES_TAX_LINE_ACCOUNT_OBJECT_CODES_PARAMETER_NAME = "SALES_TAX_APPLICABLE_ACCOUNTS_AND_OBJECT_CODES";
44  
45      
46  
47  
48      @Override
49      public Set<String> getUnviewableBlocks(AccountingDocument accountingDocument, AccountingLine accountingLine, boolean newLine, Person currentUser) {
50          Set unviewableBlocks = super.getUnviewableBlocks(accountingDocument, accountingLine, newLine, currentUser);
51          if (salesTaxUnviewable(accountingDocument, accountingLine)) {
52              unviewableBlocks.add(OLEConstants.AccountingLineViewStandardBlockNames.SALES_TAX_BLOCK);
53          }
54          return unviewableBlocks;
55      }
56  
57      
58  
59  
60  
61  
62  
63      protected boolean salesTaxUnviewable(AccountingDocument document, AccountingLine line) {
64          ParameterService parameterService = SpringContext.getBean(ParameterService.class);
65          String docTypeCode = SpringContext.getBean(DataDictionaryService.class).getDocumentTypeNameByClass(document.getClass());
66          ParameterEvaluator docTypeEvaluator = SpringContext.getBean(ParameterEvaluatorService.class).getParameterEvaluator(OleParameterConstants.FINANCIAL_PROCESSING_DOCUMENT.class, FinancialProcessingAccountingLineAuthorizer.SALES_TAX_DOCUMENT_TYPES_PARAMETER_NAME, docTypeCode);
67          if (!docTypeEvaluator.evaluationSucceeds()) return true;
68          if (!StringUtils.isEmpty(line.getFinancialObjectCode()) && !StringUtils.isEmpty(line.getAccountNumber())) {
69              String compare = line.getAccountNumber() + ":" + line.getFinancialObjectCode();
70              ParameterEvaluator salesTaxApplicableAccountAndObjectEvaluator = SpringContext.getBean(ParameterEvaluatorService.class).getParameterEvaluator(OleParameterConstants.FINANCIAL_PROCESSING_DOCUMENT.class, APPLICATION_PARAMETER.SALES_TAX_APPLICABLE_ACCOUNTS_AND_OBJECT_CODES, compare);
71              if (!salesTaxApplicableAccountAndObjectEvaluator.evaluationSucceeds()) return true;
72              return false;
73          }
74          return true;
75      }
76      
77      
78  
79  
80  
81      @Override
82      protected Map<String, AccountingLineViewAction> getActionMap(AccountingLineRenderingContext accountingLineRenderingContext, String accountingLinePropertyName, Integer accountingLineIndex, String groupTitle) {
83      
84          Map<String, AccountingLineViewAction> actionMap = super.getActionMap(accountingLineRenderingContext, accountingLinePropertyName, accountingLineIndex, groupTitle);
85  
86          if (accountingLineIndex != null) {
87              AccountingLineViewAction refreshAction = this.getRefreshAction(accountingLineRenderingContext.getAccountingLine(), accountingLinePropertyName, accountingLineIndex, groupTitle);
88              actionMap.put(OLEConstants.RETURN_METHOD_TO_CALL, refreshAction);
89          }
90          
91          return actionMap;
92      }
93      
94      
95  
96  
97  
98  
99  
100 
101 
102 
103     protected AccountingLineViewAction getRefreshAction(AccountingLine accountingLine, String accountingLinePropertyName, Integer accountingLineIndex, String groupTitle) {
104         String actionMethod = this.getRefreshLineMethod(accountingLine, accountingLinePropertyName, accountingLineIndex);
105         String actionLabel = getActionLabel(OLEKeyConstants.AccountingLineViewRendering.ACCOUNTING_LINE_REFRESH_ACTION_LABEL, groupTitle, accountingLineIndex + 1);
106 
107         String actionImageName = getRiceImagePath() + "tinybutton-refresh.gif";
108 
109         return new AccountingLineViewAction(actionMethod, actionLabel, actionImageName);
110     }
111     
112     
113 
114 
115 
116 
117 
118 
119 
120     protected String getRefreshLineMethod(AccountingLine accountingLine, String accountingLineProperty, Integer accountingLineIndex) {
121         final String infix = getActionInfixForExtantAccountingLine(accountingLine, accountingLineProperty);
122         return "refresh.line" + accountingLineIndex + ".anchoraccounting" + infix + "Anchor";
123     }
124 }
125