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.fp.document.authorization; 017 018 import java.util.List; 019 020 import org.kuali.kfs.fp.document.DistributionOfIncomeAndExpenseDocument; 021 import org.kuali.kfs.sys.KFSPropertyConstants; 022 import org.kuali.kfs.sys.businessobject.AccountingLine; 023 import org.kuali.kfs.sys.businessobject.ElectronicPaymentClaim; 024 import org.kuali.kfs.sys.document.AccountingDocument; 025 import org.kuali.rice.kns.util.ObjectUtils; 026 027 /** 028 * Authorizer which deals with financial processing document issues, specifically sales tax lines on documents This class utilizes 029 * the new accountingLine model. 030 */ 031 public class DistributionOfIncomeAndExpenseAccountingLineAuthorizer extends FinancialProcessingAccountingLineAuthorizer { 032 033 /** 034 * This method determines if the current accounting line is editable based upon if electronic claims exists on the DI document. 035 * 036 * @see org.kuali.kfs.sys.document.authorization.AccountingLineAuthorizerBase#determineFieldModifyability(org.kuali.kfs.sys.document.AccountingDocument, 037 * org.kuali.kfs.sys.businessobject.AccountingLine, org.kuali.kfs.sys.document.web.AccountingLineViewField, java.util.Map) 038 */ 039 @Override 040 public boolean determineEditPermissionOnField(AccountingDocument accountingDocument, AccountingLine accountingLine, String accountingLineCollectionProperty, String fieldName, boolean editablePage) { 041 final boolean canModify = super.determineEditPermissionOnField(accountingDocument, accountingLine, accountingLineCollectionProperty, fieldName, editablePage); 042 if (canModify && accountingLine.isSourceAccountingLine()) { 043 return !hasElectronicPaymentClaims(accountingDocument); 044 } 045 046 return canModify; 047 } 048 049 /** 050 * Don't render a new line if this is the source group and there's electronic payment claims 051 * @see org.kuali.kfs.sys.document.authorization.AccountingLineAuthorizerBase#renderNewLine(org.kuali.kfs.sys.document.AccountingDocument, java.lang.String) 052 */ 053 @Override 054 public boolean renderNewLine(AccountingDocument accountingDocument, String accountingGroupProperty) { 055 final boolean shouldRender = super.renderNewLine(accountingDocument, accountingGroupProperty); 056 if (shouldRender && accountingGroupProperty.contains("source")) { 057 return !hasElectronicPaymentClaims(accountingDocument); 058 } 059 return shouldRender; 060 } 061 062 /** 063 * There's no edit permission on lines in the source group on documents claiming electronic payments 064 * @see org.kuali.kfs.sys.document.authorization.AccountingLineAuthorizerBase#determineEditPermissionOnLine(org.kuali.kfs.sys.document.AccountingDocument, org.kuali.kfs.sys.businessobject.AccountingLine, java.lang.String) 065 */ 066 @Override 067 public boolean determineEditPermissionOnLine(AccountingDocument accountingDocument, AccountingLine accountingLine, String accountingLineCollectionProperty, boolean currentUserIsDocumentInitiator, boolean pageIsEditable) { 068 final boolean hasEditPermOnLine = super.determineEditPermissionOnLine(accountingDocument, accountingLine, accountingLineCollectionProperty, currentUserIsDocumentInitiator, pageIsEditable); 069 if (hasEditPermOnLine && accountingLineCollectionProperty.contains("source")) { 070 return !hasElectronicPaymentClaims(accountingDocument); 071 } 072 return hasEditPermOnLine; 073 } 074 075 /** 076 * Determines if the DI document has electronic payment claims associated with it 077 * @param accountingDocument a DI document 078 * @return true if there are electronic payment claims, false otherwise 079 */ 080 protected boolean hasElectronicPaymentClaims(AccountingDocument accountingDocument) { 081 DistributionOfIncomeAndExpenseDocument diDoc = (DistributionOfIncomeAndExpenseDocument) accountingDocument; 082 083 List<ElectronicPaymentClaim> epcs = diDoc.getElectronicPaymentClaims(); 084 085 if (epcs == null) { 086 diDoc.refreshReferenceObject(KFSPropertyConstants.ELECTRONIC_PAYMENT_CLAIMS); 087 epcs = diDoc.getElectronicPaymentClaims(); 088 } 089 090 return (!ObjectUtils.isNull(epcs) && epcs.size() > 0); 091 } 092 093 }