001 /* 002 * Copyright 2011 The Kuali Foundation. 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.kfs.sys.document.authorization; 017 018 import java.util.Set; 019 020 import org.apache.commons.logging.Log; 021 import org.apache.commons.logging.LogFactory; 022 import org.kuali.kfs.sys.KFSConstants; 023 import org.kuali.kfs.sys.KFSParameterKeyConstants; 024 import org.kuali.kfs.sys.businessobject.Bank; 025 import org.kuali.kfs.sys.context.SpringContext; 026 import org.kuali.kfs.sys.document.AmountTotaling; 027 import org.kuali.kfs.sys.document.Correctable; 028 import org.kuali.kfs.sys.document.FinancialSystemTransactionalDocument; 029 import org.kuali.kfs.sys.document.datadictionary.FinancialSystemTransactionalDocumentEntry; 030 import org.kuali.kfs.sys.service.BankService; 031 import org.kuali.rice.kns.datadictionary.DataDictionary; 032 import org.kuali.rice.kns.document.Document; 033 import org.kuali.rice.kns.document.authorization.TransactionalDocumentPresentationControllerBase; 034 import org.kuali.rice.kns.service.DataDictionaryService; 035 import org.kuali.rice.kns.service.ParameterEvaluator; 036 import org.kuali.rice.kns.service.ParameterService; 037 import org.kuali.rice.kns.workflow.service.KualiWorkflowDocument; 038 039 /** 040 * Base class for all FinancialSystemDocumentPresentationControllers. 041 */ 042 public class FinancialSystemTransactionalDocumentPresentationControllerBase extends TransactionalDocumentPresentationControllerBase implements FinancialSystemTransactionalDocumentPresentationController { 043 private static Log LOG = LogFactory.getLog(FinancialSystemTransactionalDocumentPresentationControllerBase.class); 044 045 /** 046 * Makes sure that the given document implements error correction, that error correction is turned on for the document in the 047 * data dictionary, and that the document is in a workflow state that allows error correction. 048 * 049 * @see org.kuali.kfs.sys.document.authorization.FinancialSystemTransactionalDocumentPresentationController#canErrorCorrect(org.kuali.kfs.sys.document.FinancialSystemTransactionalDocument) 050 */ 051 public boolean canErrorCorrect(FinancialSystemTransactionalDocument document) { 052 if (!(document instanceof Correctable)) { 053 return false; 054 } 055 056 if (!this.canCopy(document)) { 057 return false; 058 } 059 060 DataDictionary dataDictionary = SpringContext.getBean(DataDictionaryService.class).getDataDictionary(); 061 FinancialSystemTransactionalDocumentEntry documentEntry = (FinancialSystemTransactionalDocumentEntry) (dataDictionary.getDocumentEntry(document.getClass().getName())); 062 063 if (!documentEntry.getAllowsErrorCorrection()) { 064 return false; 065 } 066 067 if (document.getDocumentHeader().getCorrectedByDocumentId() != null) { 068 return false; 069 } 070 071 if (document.getDocumentHeader().getFinancialDocumentInErrorNumber() != null) { 072 return false; 073 } 074 075 final KualiWorkflowDocument workflowDocument = document.getDocumentHeader().getWorkflowDocument(); 076 077 return (workflowDocument.stateIsApproved() || workflowDocument.stateIsProcessed() || workflowDocument.stateIsFinal()); 078 } 079 080 /** 081 * @see org.kuali.rice.kns.document.authorization.DocumentPresentationControllerBase#getDocumentActions(org.kuali.rice.kns.document.Document) 082 */ 083 @Override 084 public Set<String> getDocumentActions(Document document) { 085 Set<String> documentActions = super.getDocumentActions(document); 086 087 if (document instanceof FinancialSystemTransactionalDocument) { 088 if (canErrorCorrect((FinancialSystemTransactionalDocument) document)) { 089 documentActions.add(KFSConstants.KFS_ACTION_CAN_ERROR_CORRECT); 090 } 091 092 if (canHaveBankEntry(document)) { 093 documentActions.add(KFSConstants.KFS_ACTION_CAN_EDIT_BANK); 094 } 095 } 096 097 return documentActions; 098 } 099 100 /** 101 * @see org.kuali.rice.kns.document.authorization.TransactionalDocumentPresentationControllerBase#getEditModes(org.kuali.rice.kns.document.Document) 102 */ 103 @Override 104 public Set<String> getEditModes(Document document) { 105 Set<String> editModes = super.getEditModes(document); 106 107 if (document instanceof AmountTotaling) { 108 editModes.add(KFSConstants.AMOUNT_TOTALING_EDITING_MODE); 109 } 110 111 if (this.canHaveBankEntry(document)) { 112 editModes.add(KFSConstants.BANK_ENTRY_VIEWABLE_EDITING_MODE); 113 } 114 115 return editModes; 116 } 117 118 // check if bank entry should be viewable for the given document 119 protected boolean canHaveBankEntry(Document document) { 120 boolean bankSpecificationEnabled = getBankService().isBankSpecificationEnabled(); 121 122 if (bankSpecificationEnabled) { 123 String documentTypeName = document.getDocumentHeader().getWorkflowDocument().getDocumentType(); 124 125 ParameterEvaluator evaluator = getParameterService().getParameterEvaluator(Bank.class, KFSParameterKeyConstants.BANK_CODE_DOCUMENT_TYPES, documentTypeName); 126 return evaluator.evaluationSucceeds(); 127 } 128 129 return false; 130 } 131 132 private static BankService bankService; 133 protected BankService getBankService() { 134 if ( bankService == null ) { 135 bankService = SpringContext.getBean(BankService.class); 136 } 137 return bankService; 138 } 139 }