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.validation.impl;
017
018 import org.kuali.kfs.fp.businessobject.BudgetAdjustmentAccountingLine;
019 import org.kuali.kfs.sys.KFSKeyConstants;
020 import org.kuali.kfs.sys.KFSPropertyConstants;
021 import org.kuali.kfs.sys.document.AccountingDocument;
022 import org.kuali.kfs.sys.document.service.DebitDeterminerService;
023 import org.kuali.kfs.sys.document.validation.GenericValidation;
024 import org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent;
025 import org.kuali.rice.kns.util.GlobalVariables;
026 import org.kuali.rice.kns.util.KualiDecimal;
027
028 /**
029 * Validation that checks the amounts on budget adjustment document accounting lines.
030 */
031 public class BudgetAdjustmentAccountingLineAmountValidation extends GenericValidation {
032 private BudgetAdjustmentAccountingLine accountingLineForValidation;
033 private AccountingDocument accountingDocumentForValidation;
034 private DebitDeterminerService debitDeterminerService;
035
036 /**
037 * Validates the amounts on a budget adjustment accounting line, making sure that either the current adjustment amount or the base adjustment amount are not zero,
038 * and that all given amounts are positive.
039 * @see org.kuali.kfs.sys.document.validation.Validation#validate(org.kuali.kfs.sys.document.validation.event.AttributedDocumentEvent)
040 */
041 public boolean validate(AttributedDocumentEvent event) {
042 boolean amountValid = true;
043
044 // check amounts both current and base amounts are not zero
045 if (getAccountingLineForValidation().getCurrentBudgetAdjustmentAmount().isZero() && getAccountingLineForValidation().getBaseBudgetAdjustmentAmount().isZero()) {
046 GlobalVariables.getMessageMap().putError(KFSPropertyConstants.BASE_BUDGET_ADJUSTMENT_AMOUNT, KFSKeyConstants.ERROR_BA_AMOUNT_ZERO);
047 amountValid = false;
048 }
049
050 // if not an error correction, all amounts must be positive
051 if (!debitDeterminerService.isErrorCorrection(getAccountingDocumentForValidation())) {
052 amountValid &= checkAmountSign(getAccountingLineForValidation().getCurrentBudgetAdjustmentAmount(), KFSPropertyConstants.CURRENT_BUDGET_ADJUSTMENT_AMOUNT, "Current");
053 amountValid &= checkAmountSign(getAccountingLineForValidation().getBaseBudgetAdjustmentAmount().kualiDecimalValue(), KFSPropertyConstants.BASE_BUDGET_ADJUSTMENT_AMOUNT, "Base");
054 amountValid &= checkAmountSign(getAccountingLineForValidation().getFinancialDocumentMonth1LineAmount(), KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_1_LINE_AMOUNT, "Month 1");
055 amountValid &= checkAmountSign(getAccountingLineForValidation().getFinancialDocumentMonth2LineAmount(), KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_2_LINE_AMOUNT, "Month 2");
056 amountValid &= checkAmountSign(getAccountingLineForValidation().getFinancialDocumentMonth3LineAmount(), KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_3_LINE_AMOUNT, "Month 3");
057 amountValid &= checkAmountSign(getAccountingLineForValidation().getFinancialDocumentMonth4LineAmount(), KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_4_LINE_AMOUNT, "Month 4");
058 amountValid &= checkAmountSign(getAccountingLineForValidation().getFinancialDocumentMonth5LineAmount(), KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_5_LINE_AMOUNT, "Month 5");
059 amountValid &= checkAmountSign(getAccountingLineForValidation().getFinancialDocumentMonth6LineAmount(), KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_6_LINE_AMOUNT, "Month 6");
060 amountValid &= checkAmountSign(getAccountingLineForValidation().getFinancialDocumentMonth7LineAmount(), KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_7_LINE_AMOUNT, "Month 7");
061 amountValid &= checkAmountSign(getAccountingLineForValidation().getFinancialDocumentMonth8LineAmount(), KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_8_LINE_AMOUNT, "Month 8");
062 amountValid &= checkAmountSign(getAccountingLineForValidation().getFinancialDocumentMonth8LineAmount(), KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_9_LINE_AMOUNT, "Month 9");
063 amountValid &= checkAmountSign(getAccountingLineForValidation().getFinancialDocumentMonth10LineAmount(), KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_10_LINE_AMOUNT, "Month 10");
064 amountValid &= checkAmountSign(getAccountingLineForValidation().getFinancialDocumentMonth10LineAmount(), KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_11_LINE_AMOUNT, "Month 11");
065 amountValid &= checkAmountSign(getAccountingLineForValidation().getFinancialDocumentMonth12LineAmount(), KFSPropertyConstants.FINANCIAL_DOCUMENT_MONTH_12_LINE_AMOUNT, "Month 12");
066 }
067
068 return amountValid;
069 }
070
071 /**
072 * Helper method to check if an amount is negative and add an error if not.
073 *
074 * @param amount to check
075 * @param propertyName to add error under
076 * @param label for error
077 * @return boolean indicating if the value has the requested sign
078 */
079 protected boolean checkAmountSign(KualiDecimal amount, String propertyName, String label) {
080 boolean correctSign = true;
081
082 if (amount.isNegative()) {
083 GlobalVariables.getMessageMap().putError(propertyName, KFSKeyConstants.ERROR_BA_AMOUNT_NEGATIVE, label);
084 correctSign = false;
085 }
086
087 return correctSign;
088 }
089
090
091 /**
092 * Gets the accountingLineForValidation attribute.
093 * @return Returns the accountingLineForValidation.
094 */
095 public BudgetAdjustmentAccountingLine getAccountingLineForValidation() {
096 return accountingLineForValidation;
097 }
098
099 /**
100 * Sets the accountingLineForValidation attribute value.
101 * @param accountingLineForValidation The accountingLineForValidation to set.
102 */
103 public void setAccountingLineForValidation(BudgetAdjustmentAccountingLine accountingLineForValidation) {
104 this.accountingLineForValidation = accountingLineForValidation;
105 }
106
107 /**
108 * Gets the accountingDocumentForValidation attribute.
109 * @return Returns the accountingDocumentForValidation.
110 */
111 public AccountingDocument getAccountingDocumentForValidation() {
112 return accountingDocumentForValidation;
113 }
114
115 /**
116 * Sets the accountingDocumentForValidation attribute value.
117 * @param accountingDocumentForValidation The accountingDocumentForValidation to set.
118 */
119 public void setAccountingDocumentForValidation(AccountingDocument accountingDocumentForValidation) {
120 this.accountingDocumentForValidation = accountingDocumentForValidation;
121 }
122
123 /**
124 * Gets the debitDeterminerService attribute.
125 * @return Returns the debitDeterminerService.
126 */
127 public DebitDeterminerService getDebitDeterminerService() {
128 return debitDeterminerService;
129 }
130
131 /**
132 * Sets the debitDeterminerService attribute value.
133 * @param debitDeterminerService The debitDeterminerService to set.
134 */
135 public void setDebitDeterminerService(DebitDeterminerService debitDeterminerService) {
136 this.debitDeterminerService = debitDeterminerService;
137 }
138 }