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.CashDrawer;
019 import org.kuali.kfs.fp.service.CashDrawerService;
020 import org.kuali.kfs.sys.KFSKeyConstants;
021 import org.kuali.kfs.sys.context.SpringContext;
022 import org.kuali.rice.kns.document.MaintenanceDocument;
023 import org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase;
024 import org.kuali.rice.kns.util.KualiDecimal;
025
026 /**
027 * Validations for the Cash Drawer Maintenance Document
028 */
029 public class CashDrawerMaintenanceDocumentRule extends MaintenanceDocumentRuleBase {
030
031 /**
032 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomRouteDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument)
033 */
034 @Override
035 protected boolean processCustomRouteDocumentBusinessRules(MaintenanceDocument document) {
036 boolean documentValid = super.processCustomRouteDocumentBusinessRules(document);
037 final CashDrawer cashDrawer = (CashDrawer)document.getNewMaintainableObject().getBusinessObject();
038 documentValid &= checkCashDrawerStillClosed(cashDrawer);
039 documentValid &= checkCurrencyAmountsPositive(cashDrawer);
040 documentValid &= checkCoinAmountsPositive(cashDrawer);
041 return documentValid;
042 }
043
044 /**
045 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomSaveDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument)
046 */
047 @Override
048 protected boolean processCustomSaveDocumentBusinessRules(MaintenanceDocument document) {
049 boolean documentValid = super.processCustomSaveDocumentBusinessRules(document);
050 final CashDrawer cashDrawer = (CashDrawer)document.getNewMaintainableObject().getBusinessObject();
051 documentValid &= checkCashDrawerStillClosed(cashDrawer);
052 if (documentValid) {
053 checkCurrencyAmountsPositive(cashDrawer);
054 checkCoinAmountsPositive(cashDrawer);
055 }
056 return documentValid;
057 }
058
059 /**
060 * @see org.kuali.rice.kns.maintenance.rules.MaintenanceDocumentRuleBase#processCustomApproveDocumentBusinessRules(org.kuali.rice.kns.document.MaintenanceDocument)
061 */
062 @Override
063 protected boolean processCustomApproveDocumentBusinessRules(MaintenanceDocument document) {
064 boolean documentValid = super.processCustomApproveDocumentBusinessRules(document);
065 final CashDrawer cashDrawer = (CashDrawer)document.getNewMaintainableObject().getBusinessObject();
066 checkCurrencyAmountsPositive(cashDrawer);
067 checkCoinAmountsPositive(cashDrawer);
068 return documentValid;
069 }
070
071 /**
072 * Validates that all the currency counts are positive
073 * @param cashDrawer the cash drawer to check
074 * @return true if the cash drawer has valid positive currency amounts, false otherwise
075 */
076 protected boolean checkCurrencyAmountsPositive(CashDrawer cashDrawer) {
077 boolean valid = true;
078 if (cashDrawer.getFinancialDocumentHundredDollarAmount() != null && cashDrawer.getFinancialDocumentHundredDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
079 putFieldError("hundredDollarCount", KFSKeyConstants.CashDrawerMaintenance.HUNDRED_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getHundredDollarCount().toString() });
080 valid = false;
081 }
082 if (cashDrawer.getFinancialDocumentFiftyDollarAmount() != null && cashDrawer.getFinancialDocumentFiftyDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
083 putFieldError("fiftyDollarCount", KFSKeyConstants.CashDrawerMaintenance.FIFTY_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getFiftyDollarCount().toString() });
084 valid = false;
085 }
086 if (cashDrawer.getFinancialDocumentTwentyDollarAmount() != null && cashDrawer.getFinancialDocumentTwentyDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
087 putFieldError("twentyDollarCount", KFSKeyConstants.CashDrawerMaintenance.TWENTY_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getTwentyDollarCount().toString() });
088 valid = false;
089 }
090 if (cashDrawer.getFinancialDocumentTenDollarAmount() != null && cashDrawer.getFinancialDocumentTenDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
091 putFieldError("tenDollarCount", KFSKeyConstants.CashDrawerMaintenance.TEN_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getTenDollarCount().toString() });
092 valid = false;
093 }
094 if (cashDrawer.getFinancialDocumentFiveDollarAmount() != null && cashDrawer.getFinancialDocumentFiveDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
095 putFieldError("fiveDollarCount", KFSKeyConstants.CashDrawerMaintenance.FIVE_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getFiveDollarCount().toString() });
096 valid = false;
097 }
098 if (cashDrawer.getFinancialDocumentTwoDollarAmount() != null && cashDrawer.getFinancialDocumentTwoDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
099 putFieldError("twoDollarCount", KFSKeyConstants.CashDrawerMaintenance.TWO_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getTwoDollarCount().toString() });
100 valid = false;
101 }
102 if (cashDrawer.getFinancialDocumentOneDollarAmount() != null && cashDrawer.getFinancialDocumentOneDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
103 putFieldError("oneDollarCount", KFSKeyConstants.CashDrawerMaintenance.ONE_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getOneDollarCount().toString() });
104 valid = false;
105 }
106 if (cashDrawer.getFinancialDocumentOtherDollarAmount() != null && cashDrawer.getFinancialDocumentOtherDollarAmount().compareTo(KualiDecimal.ZERO) < 0) {
107 putFieldError("financialDocumentOtherDollarAmount", KFSKeyConstants.CashDrawerMaintenance.OTHER_DOLLAR_AMOUNT_NEGATIVE, new String[] { cashDrawer.getFinancialDocumentOtherDollarAmount().toString() });
108 valid = false;
109 }
110 return valid;
111 }
112
113 /**
114 * Validates that all the coin counts are positive
115 * @param cashDrawer the cash drawer to check
116 * @return true if the cash drawer has valid positive coin amounts, false otherwise
117 */
118 protected boolean checkCoinAmountsPositive(CashDrawer cashDrawer) {
119 boolean valid = true;
120 if (cashDrawer.getFinancialDocumentHundredCentAmount() != null && cashDrawer.getFinancialDocumentHundredCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
121 putFieldError("hundredCentCount", KFSKeyConstants.CashDrawerMaintenance.HUNDRED_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getHundredCentCount().toString() });
122 valid = false;
123 }
124 if (cashDrawer.getFinancialDocumentFiftyCentAmount() != null && cashDrawer.getFinancialDocumentFiftyCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
125 putFieldError("fiftyCentCount", KFSKeyConstants.CashDrawerMaintenance.FIFTY_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getFiftyCentCount().toString() });
126 valid = false;
127 }
128 if (cashDrawer.getFinancialDocumentTwentyFiveCentAmount() != null && cashDrawer.getFinancialDocumentTwentyFiveCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
129 putFieldError("twentyFiveCentCount", KFSKeyConstants.CashDrawerMaintenance.TWENTY_FIVE_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getTwentyFiveCentCount().toString() });
130 valid = false;
131 }
132 if (cashDrawer.getFinancialDocumentTenCentAmount() != null && cashDrawer.getFinancialDocumentTenCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
133 putFieldError("tenCentCount", KFSKeyConstants.CashDrawerMaintenance.TEN_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getTenCentCount().toString() });
134 valid = false;
135 }
136 if (cashDrawer.getFinancialDocumentFiveCentAmount() != null && cashDrawer.getFinancialDocumentFiveCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
137 putFieldError("fiveCentCount", KFSKeyConstants.CashDrawerMaintenance.FIVE_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getFiveCentCount().toString() });
138 valid = false;
139 }
140 if (cashDrawer.getFinancialDocumentOneCentAmount() != null && cashDrawer.getFinancialDocumentOneCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
141 putFieldError("oneCentCount", KFSKeyConstants.CashDrawerMaintenance.ONE_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getOneCentCount().toString() });
142 valid = false;
143 }
144 if (cashDrawer.getFinancialDocumentOtherCentAmount() != null && cashDrawer.getFinancialDocumentOtherCentAmount().compareTo(KualiDecimal.ZERO) < 0) {
145 putFieldError("financialDocumentOtherCentAmount", KFSKeyConstants.CashDrawerMaintenance.OTHER_CENT_AMOUNT_NEGATIVE, new String[] { cashDrawer.getFinancialDocumentOtherCentAmount().toString() });
146 valid = false;
147 }
148 return valid;
149 }
150
151 /**
152 * Checks that the cash drawer is still closed at the time of the rule invocation.
153 * @param cashDrawer the cash drawer to check
154 */
155 public boolean checkCashDrawerStillClosed(CashDrawer cashDrawer) {
156 boolean valid = true;
157 final CashDrawerService cashDrawerService = SpringContext.getBean(CashDrawerService.class);
158 final CashDrawer cashDrawerFromDB = cashDrawerService.getByCampusCode(cashDrawer.getCampusCode());
159 if (cashDrawerFromDB != null && !cashDrawerFromDB.isClosed()) {
160 putFieldError("campusCode", KFSKeyConstants.CashDrawerMaintenance.CASH_DRAWER_NOT_CLOSED, new String[] { cashDrawer.getCampusCode() });
161 valid = false;
162 }
163 return valid;
164 }
165 }