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.web.struts;
017
018 import java.util.ArrayList;
019 import java.util.List;
020
021 import javax.servlet.http.HttpServletRequest;
022
023 import org.apache.commons.lang.StringUtils;
024 import org.apache.struts.util.LabelValueBean;
025 import org.kuali.kfs.fp.businessobject.CapitalAssetInformation;
026 import org.kuali.kfs.fp.businessobject.CashDrawer;
027 import org.kuali.kfs.fp.businessobject.Check;
028 import org.kuali.kfs.fp.document.CapitalAssetEditable;
029 import org.kuali.kfs.fp.document.CashManagementDocument;
030 import org.kuali.kfs.fp.document.CashReceiptDocument;
031 import org.kuali.kfs.fp.document.service.CashManagementService;
032 import org.kuali.kfs.fp.document.service.CashReceiptCoverSheetService;
033 import org.kuali.kfs.fp.document.service.CashReceiptService;
034 import org.kuali.kfs.fp.service.CashDrawerService;
035 import org.kuali.kfs.sys.KFSConstants;
036 import org.kuali.kfs.sys.KFSKeyConstants;
037 import org.kuali.kfs.sys.KFSConstants.DocumentStatusCodes.CashReceipt;
038 import org.kuali.kfs.sys.context.SpringContext;
039 import org.kuali.kfs.sys.web.struts.KualiAccountingDocumentFormBase;
040 import org.kuali.rice.kns.service.KualiConfigurationService;
041 import org.kuali.rice.kns.util.KualiDecimal;
042 import org.kuali.rice.kns.web.format.SimpleBooleanFormatter;
043
044 /**
045 * This class is the action form for Cash Receipts.
046 */
047 public class CashReceiptForm extends KualiAccountingDocumentFormBase implements CapitalAssetEditable{
048 protected static final long serialVersionUID = 1L;
049 protected static final String CAN_PRINT_COVERSHEET_SIG_STR = "isCoverSheetPrintingAllowed";
050
051 protected Check newCheck;
052
053 protected KualiDecimal checkTotal;
054
055 protected String checkEntryMode;
056 protected List checkEntryModes;
057
058 protected List baselineChecks;
059
060 protected CapitalAssetInformation capitalAssetInformation;
061
062 /**
063 * Constructs a CashReceiptForm.java.
064 */
065 public CashReceiptForm() {
066 super();
067 setFormatterType(CAN_PRINT_COVERSHEET_SIG_STR, SimpleBooleanFormatter.class);
068 setNewCheck(getCashReceiptDocument().createNewCheck());
069
070 checkEntryModes = new ArrayList();
071 checkEntryModes.add(new LabelValueBean("Individual Checks/Batches", CashReceiptDocument.CHECK_ENTRY_DETAIL));
072 checkEntryModes.add(new LabelValueBean("Total Only", CashReceiptDocument.CHECK_ENTRY_TOTAL));
073
074 baselineChecks = new ArrayList();
075
076 this.setCapitalAssetInformation(new CapitalAssetInformation());
077 }
078
079 @Override
080 protected String getDefaultDocumentTypeName() {
081 return "CR";
082 }
083
084 @Override
085 public void populate(HttpServletRequest request) {
086 super.populate(request);
087
088 setCheckEntryMode(getCashReceiptDocument().getCheckEntryMode());
089 }
090
091 /**
092 * @return CashReceiptDocument
093 */
094 public CashReceiptDocument getCashReceiptDocument() {
095 return (CashReceiptDocument) getDocument();
096 }
097
098 /**
099 * @return Check
100 */
101 public Check getNewCheck() {
102 return newCheck;
103 }
104
105 /**
106 * @param newCheck
107 */
108 public void setNewCheck(Check newCheck) {
109 this.newCheck = newCheck;
110 }
111
112 /**
113 * @param checkTotal
114 */
115 public void setCheckTotal(KualiDecimal checkTotal) {
116 this.checkTotal = checkTotal;
117 }
118
119 /**
120 * @return KualiDecimal
121 */
122 public KualiDecimal getCheckTotal() {
123 return checkTotal;
124 }
125
126 /**
127 * @return List of LabelValueBeans representing all available check entry modes
128 */
129 public List getCheckEntryModes() {
130 return checkEntryModes;
131 }
132
133 /**
134 * @return String
135 */
136 public String getCheckEntryMode() {
137 return checkEntryMode;
138 }
139
140 /**
141 * @param checkEntryMode
142 */
143 public void setCheckEntryMode(String checkEntryMode) {
144 this.checkEntryMode = checkEntryMode;
145 }
146
147 /**
148 * @return boolean
149 */
150 public boolean isCheckEntryDetailMode() {
151 return CashReceiptDocument.CHECK_ENTRY_DETAIL.equals(getCheckEntryMode());
152 }
153
154 /**
155 * @return current List of baseline checks for use in update detection
156 */
157 public List getBaselineChecks() {
158 return baselineChecks;
159 }
160
161 /**
162 * Sets the current List of baseline checks to the given List
163 *
164 * @param baselineChecks
165 */
166 public void setBaselineChecks(List baselineChecks) {
167 this.baselineChecks = baselineChecks;
168 }
169
170 /**
171 * @param index
172 * @return true if a baselineCheck with the given index exists
173 */
174 public boolean hasBaselineCheck(int index) {
175 boolean has = false;
176
177 if ((index >= 0) && (index < baselineChecks.size())) {
178 has = true;
179 }
180
181 return has;
182 }
183
184 /**
185 * Implementation creates empty Checks as a side-effect, so that Struts' efforts to set fields of lines which haven't been
186 * created will succeed rather than causing a NullPointerException.
187 *
188 * @param index
189 * @return baseline Check at the given index
190 */
191 public Check getBaselineCheck(int index) {
192 while (baselineChecks.size() <= index) {
193 baselineChecks.add(getCashReceiptDocument().createNewCheck());
194 }
195 return (Check) baselineChecks.get(index);
196 }
197
198 /**
199 * Gets the financialDocumentStatusMessage which is dependent upon document state.
200 *
201 * @return Returns the financialDocumentStatusMessage.
202 */
203 public String getFinancialDocumentStatusMessage() {
204 String financialDocumentStatusMessage = "";
205 CashReceiptDocument crd = getCashReceiptDocument();
206 String financialDocumentStatusCode = crd.getDocumentHeader().getFinancialDocumentStatusCode();
207 if (financialDocumentStatusCode.equals(CashReceipt.VERIFIED)) {
208 financialDocumentStatusMessage = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSKeyConstants.CashReceipt.MSG_VERIFIED_BUT_NOT_AWAITING_DEPOSIT);
209 }
210 else if (financialDocumentStatusCode.equals(CashReceipt.INTERIM) || financialDocumentStatusCode.equals(CashReceipt.FINAL)) {
211 CashManagementDocument cmd = SpringContext.getBean(CashManagementService.class).getCashManagementDocumentForCashReceiptId(crd.getDocumentNumber());
212 if (cmd != null) {
213 String cmdFinancialDocNbr = cmd.getDocumentNumber();
214
215 String loadCMDocUrl = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSKeyConstants.CashManagement.URL_LOAD_DOCUMENT_CASH_MGMT);
216 loadCMDocUrl = StringUtils.replace(loadCMDocUrl, "{0}", cmdFinancialDocNbr);
217
218 financialDocumentStatusMessage = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSKeyConstants.CashReceipt.MSG_VERIFIED_AND_AWAITING_DEPOSIT);
219 financialDocumentStatusMessage = StringUtils.replace(financialDocumentStatusMessage, "{0}", loadCMDocUrl);
220 }
221 }
222 else if (financialDocumentStatusCode.equals(KFSConstants.DocumentStatusCodes.APPROVED)) {
223 CashManagementDocument cmd = SpringContext.getBean(CashManagementService.class).getCashManagementDocumentForCashReceiptId(crd.getDocumentNumber());
224 if (cmd != null) {
225 String cmdFinancialDocNbr = cmd.getDocumentNumber();
226
227 String loadCMDocUrl = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSKeyConstants.CashManagement.URL_LOAD_DOCUMENT_CASH_MGMT);
228 loadCMDocUrl = StringUtils.replace(loadCMDocUrl, "{0}", cmdFinancialDocNbr);
229
230 financialDocumentStatusMessage = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSKeyConstants.CashReceipt.MSG_VERIFIED_AND_DEPOSITED);
231 financialDocumentStatusMessage = StringUtils.replace(financialDocumentStatusMessage, "{0}", loadCMDocUrl);
232 }
233 }
234 return financialDocumentStatusMessage;
235 }
236
237 /**
238 * This method will build out a message in the case the document is ENROUTE and the cash drawer is closed.
239 *
240 * @return String
241 */
242 public String getCashDrawerStatusMessage() {
243 String cashDrawerStatusMessage = "";
244 CashReceiptDocument crd = getCashReceiptDocument();
245
246 // first check to see if the document is in the appropriate state for this message
247 if (crd != null && crd.getDocumentHeader() != null && crd.getDocumentHeader().getWorkflowDocument() != null) {
248 if (crd.getDocumentHeader().getWorkflowDocument().stateIsEnroute()) {
249 CashDrawer cd = SpringContext.getBean(CashDrawerService.class).getByCampusCode(crd.getCampusLocationCode());
250 if (cd != null && crd.getDocumentHeader().getWorkflowDocument().isApprovalRequested() && cd.isClosed() && !crd.getDocumentHeader().getWorkflowDocument().isAdHocRequested()) {
251 cashDrawerStatusMessage = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSKeyConstants.CashReceipt.MSG_CASH_DRAWER_CLOSED_VERIFICATION_NOT_ALLOWED);
252 cashDrawerStatusMessage = StringUtils.replace(cashDrawerStatusMessage, "{0}", crd.getCampusLocationCode());
253 }
254 }
255 }
256
257 return cashDrawerStatusMessage;
258 }
259
260 /**
261 * determines if the <code>{@link CashReceiptDocument}</code> is in a state that allows printing of the cover sheet.
262 *
263 * @return boolean
264 */
265 public boolean isCoverSheetPrintingAllowed() {
266 return SpringContext.getBean(CashReceiptCoverSheetService.class).isCoverSheetPrintingAllowed(getCashReceiptDocument());
267 }
268
269 /**
270 * @see org.kuali.kfs.fp.document.CapitalAssetEditable#getCapitalAssetInformation()
271 */
272 public CapitalAssetInformation getCapitalAssetInformation() {
273 return this.capitalAssetInformation;
274 }
275
276 /**
277 * @see org.kuali.kfs.fp.document.CapitalAssetEditable#setCapitalAssetInformation(org.kuali.kfs.fp.businessobject.CapitalAssetInformation)
278 */
279 public void setCapitalAssetInformation(CapitalAssetInformation capitalAssetInformation) {
280 this.capitalAssetInformation = capitalAssetInformation;
281 }
282
283 /**
284 * @see org.kuali.kfs.sys.web.struts.KualiAccountingDocumentFormBase#getExcludedmethodToCall()
285 */
286 protected List<String> getExcludedmethodToCall() {
287 List<String> execludedMethodToCall = super.getExcludedmethodToCall();
288 execludedMethodToCall.add("printCoverSheet");
289
290 return execludedMethodToCall;
291 }
292 }