/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.fp.document.web.struts; import java.io.Serializable; import java.sql.Timestamp; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map; import org.apache.log4j.Logger; import org.kuali.kfs.fp.businessobject.CashDrawer; import org.kuali.kfs.fp.businessobject.CashieringItemInProcess; import org.kuali.kfs.fp.businessobject.Check; import org.kuali.kfs.fp.businessobject.CheckBase; import org.kuali.kfs.fp.businessobject.CoinDetail; import org.kuali.kfs.fp.businessobject.CurrencyDetail; import org.kuali.kfs.fp.businessobject.Deposit; import org.kuali.kfs.fp.businessobject.format.CashDrawerStatusCodeFormatter; import org.kuali.kfs.fp.businessobject.format.CashReceiptDepositTypeFormatter; import org.kuali.kfs.fp.document.CashManagementDocument; import org.kuali.kfs.fp.document.CashReceiptDocument; import org.kuali.kfs.fp.document.authorization.CashManagementDocumentPresentationController; import org.kuali.kfs.fp.document.service.CashManagementService; import org.kuali.kfs.fp.document.service.CashReceiptService; import org.kuali.kfs.fp.service.CashDrawerService; import org.kuali.kfs.sys.KFSConstants.DepositConstants; import org.kuali.kfs.sys.KFSConstants.DocumentStatusCodes.CashReceipt; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.kfs.sys.document.datadictionary.FinancialSystemTransactionalDocumentEntry; import org.kuali.rice.core.api.datetime.DateTimeService; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.core.web.format.CurrencyFormatter; import org.kuali.rice.core.web.format.TimestampAMPMFormatter; import org.kuali.rice.kns.service.DataDictionaryService; import org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase; /** * This class is the action form for CashManagement */ public class CashManagementForm extends KualiDocumentFormBase { protected static final long serialVersionUID = 1L; protected static Logger LOG = Logger.getLogger(CashManagementForm.class); protected static final String CAMPUS_CODE_PROPERTY = "document.campusCode"; protected transient List depositHelpers; protected CashDrawerSummary cashDrawerSummary; protected List<CashieringItemInProcess> recentlyClosedItemsInProcess; protected transient CashManagementDocumentPresentationController cmDocPrezController; /** * Constructs a CashManagementForm. */ public CashManagementForm() { super(); depositHelpers = new ArrayList(); setFormatterType("document.cashDrawerStatus", CashDrawerStatusCodeFormatter.class); setFormatterType("document.deposit.depositTypeCode", CashReceiptDepositTypeFormatter.class); setFormatterType("cashDrawerSummary.timeOpened", TimestampAMPMFormatter.class); setFormatterType("cashDrawerSummary.timeRefreshed", TimestampAMPMFormatter.class); setFormatterType("cashDrawerSummary.*Total", CurrencyFormatter.class); setFormatterType("document.currentTransaction.transactionStarted", TimestampAMPMFormatter.class); } @Override protected String getDefaultDocumentTypeName() { return "CMD"; } /** * @return cashManagementDocument */ public CashManagementDocument getCashManagementDocument() { return (CashManagementDocument) getDocument(); } /** * Creates a DepositHelper foreach Deposit associated with this form's document */ public void populateDepositHelpers() { depositHelpers = new ArrayList(); List deposits = getCashManagementDocument().getDeposits(); for (Iterator i = deposits.iterator(); i.hasNext();) { Deposit d = (Deposit) i.next(); DepositHelper dh = new DepositHelper(d); depositHelpers.add(dh); } } /** * Creates and initializes a CashDrawerSummary for the related CashManagementDocument, if it is not currently closed */ public void populateCashDrawerSummary() { CashManagementDocument cmd = getCashManagementDocument(); if (cmd != null) { CashDrawer cd = SpringContext.getBean(CashDrawerService.class).getByCampusCode(cmd.getCampusCode()); if (cd == null) { throw new RuntimeException("No cash drawer exists for campus code "+cmd.getCampusCode()+"; please create on via the Cash Drawer Maintenance Document before attemping to create a CashManagementDocument for campus "+cmd.getCampusCode()); } if (!cd.isClosed()) { cashDrawerSummary = new CashDrawerSummary(cmd); } } } /** * Tells any JSP page using this form whether an action can be taken to make the last interim deposit the final deposit * * @return true if last interim deposit could be the final deposit, false if otherwise */ public boolean isLastInterimDepositFinalizable() { boolean result = true; CashManagementDocument cmDoc = getCashManagementDocument(); result &= !cmDoc.hasFinalDeposit(); result &= (cmDoc.getDeposits().size() > 0); if (result) { result &= SpringContext.getBean(CashManagementService.class).allVerifiedCashReceiptsAreDeposited(cmDoc); } return result; } /** * @return CashDrawerSummary instance associated with this form, if any */ public CashDrawerSummary getCashDrawerSummary() { return cashDrawerSummary; } /** * Sets the CashDrawerSummary */ public void setCashDrawerSummary(CashDrawerSummary cashDrawerSummary) { this.cashDrawerSummary = cashDrawerSummary; } /** * @return List */ public List getDepositHelpers() { return depositHelpers; } /** * Gets the recentlyClosedItemsInProcess attribute. * * @return Returns the recentlyClosedItemsInProcess. */ public List<CashieringItemInProcess> getRecentlyClosedItemsInProcess() { return recentlyClosedItemsInProcess; } /** * Sets the recentlyClosedItemsInProcess attribute value. * * @param recentlyClosedItemsInProcess The recentlyClosedItemsInProcess to set. */ public void setRecentlyClosedItemsInProcess(List<CashieringItemInProcess> recentlyClosedItemsInProcess) { this.recentlyClosedItemsInProcess = recentlyClosedItemsInProcess; } /** * @return true if the cash drawer can currently be opened, false otherwise */ public boolean getAllowOpenCashDrawer() { if (cmDocPrezController == null) { cmDocPrezController = createCashManagementDocumentPresentationController(); } return cmDocPrezController.canOpenCashDrawer(getDocument()); } /** * Creates an instance of the appropriate implementation of CashManagementDocumentPresentationController to check the cash drawer opening logic * @return an instance of the CashManagementDocumentPresentationController for the document */ protected CashManagementDocumentPresentationController createCashManagementDocumentPresentationController() { final DataDictionaryService dataDictionaryService = SpringContext.getBean(DataDictionaryService.class); final FinancialSystemTransactionalDocumentEntry cmDocEntry = (FinancialSystemTransactionalDocumentEntry)dataDictionaryService.getDataDictionary().getDocumentEntry(dataDictionaryService.getDocumentTypeNameByClass(getDocument().getClass())); final CashManagementDocumentPresentationController cmDocPrezController; try { cmDocPrezController = (CashManagementDocumentPresentationController)cmDocEntry.getDocumentPresentationControllerClass().newInstance(); } catch (InstantiationException ie) { throw new RuntimeException("Cannot instantiate instance of document presentation controller with class "+cmDocEntry.getDocumentPresentationControllerClass().getName(), ie); } catch (IllegalAccessException iae) { throw new RuntimeException("Illegal access occurred while instantiating instance of maintainable implementation "+cmDocEntry.getDocumentPresentationControllerClass().getName(), iae); } return cmDocPrezController; } /** * @param i * @return DepositHelper */ public DepositHelper getDepositHelper(int i) { while (depositHelpers.size() <= i) { depositHelpers.add(new DepositHelper()); } DepositHelper dh = (DepositHelper) depositHelpers.get(i); return dh; } /** * Removes and returns DepositHelper at the given index * * @param i * @return */ public DepositHelper removeDepositHelper(int i) { return (DepositHelper) depositHelpers.remove(i); } /** * Inner helper class. */ public static final class DepositHelper { protected Integer depositLineNumber; protected List<CashReceiptSummary> cashReceiptSummarys; protected List<Check> cashieringChecks; /** * Constructs a DepositHelper - default constructor used by PojoProcessor. */ public DepositHelper() { cashReceiptSummarys = new ArrayList<CashReceiptSummary>(); cashieringChecks = new ArrayList<Check>(); depositLineNumber = new Integer(1); } /** * Constructs a DepositHelper * * @param deposit */ public DepositHelper(Deposit deposit) { depositLineNumber = deposit.getFinancialDocumentDepositLineNumber(); cashReceiptSummarys = new ArrayList<CashReceiptSummary>(); CashManagementService cmService = SpringContext.getBean(CashManagementService.class); List<CashReceiptDocument> cashReceipts = cmService.retrieveCashReceipts(deposit); for (CashReceiptDocument document : cashReceipts) { cashReceiptSummarys.add(new CashReceiptSummary(document)); } cashieringChecks = cmService.selectCashieringChecksForDeposit(deposit.getDocumentNumber(), depositLineNumber); } /** * @return List */ public List<CashReceiptSummary> getCashReceiptSummarys() { return cashReceiptSummarys; } /** * @param i * @return CashReceiptSummary */ public CashReceiptSummary getCashReceiptSummary(int index) { extendCashReceiptSummarys(index + 1); return cashReceiptSummarys.get(index); } /** * Ensures that there are at least minSize entries in the cashReceiptSummarys list * * @param minSize */ protected void extendCashReceiptSummarys(int minSize) { while (cashReceiptSummarys.size() < minSize) { cashReceiptSummarys.add(new CashReceiptSummary()); } } /** * Gets the cashieringChecks attribute. * * @return Returns the cashieringChecks. */ public List<Check> getCashieringChecks() { return cashieringChecks; } /** * Get a specific cashiering check in the list of cashiering checks * * @param index the index of the check to retrieve * @return a check */ public Check getCashieringCheck(int index) { extendCashieringChecks(index); return cashieringChecks.get(index); } /** * This method makes the cashiering checks list longer, to avoid Array Index out of bounds issues * * @param minSize the minimum size to make the list */ protected void extendCashieringChecks(int minSize) { while (cashieringChecks.size() <= minSize) { cashieringChecks.add(new CheckBase()); } } /** * @return Integer */ public Integer getDepositLineNumber() { return depositLineNumber; } /** * @see java.lang.Object#toString() */ @Override public String toString() { return "deposit #" + depositLineNumber; } } public static final class CashReceiptSummary { protected String documentNumber; protected String description; protected Timestamp createDate; protected KualiDecimal totalAmount; protected KualiDecimal cashAmount; protected KualiDecimal checkAmount; protected String documentStatusCode; /** * Default constructor used by PojoProcessor. */ public CashReceiptSummary() { } /** * Constructs a CashReceiptSummary from the given CashReceiptDocument. * * @param crd */ public CashReceiptSummary(CashReceiptDocument crd) { documentNumber = crd.getDocumentNumber(); description = crd.getDocumentHeader().getDocumentDescription(); createDate = new Timestamp(crd.getDocumentHeader().getWorkflowDocument().getDateCreated().getMillis()); checkAmount = crd.getTotalConfirmedCheckAmount(); cashAmount = crd.getTotalConfirmedCashInAmount(); totalAmount = crd.getTotalConfirmedNetAmount(); documentStatusCode = crd.getFinancialSystemDocumentHeader().getFinancialDocumentStatusCode(); } /** * @return current value of createDate. */ public Timestamp getCreateDate() { return createDate; } /** * Sets the createDate attribute value. * * @param createDate The createDate to set. */ public void setCreateDate(Timestamp createDate) { this.createDate = createDate; } /** * @return current value of description. */ public String getDescription() { return description; } /** * Sets the description attribute value. * * @param description The description to set. */ public void setDescription(String description) { this.description = description; } /** * @return current value of documentNumber. */ public String getDocumentNumber() { return documentNumber; } /** * Sets the documentNumber attribute value. * * @param docNumber The documentNumber to set. */ public void setDocumentNumber(String documentNumber) { this.documentNumber = documentNumber; } /** * @return current value of totalAmount. */ public KualiDecimal getTotalAmount() { return totalAmount; } /** * Sets the totalAmount attribute value. * * @param totalAmount The totalAmount to set. */ public void setTotalAmount(KualiDecimal totalAmount) { this.totalAmount = totalAmount; } /** * Returns the total check amount for this CR * * @return a total of checks */ public KualiDecimal getCheckAmount() { return this.checkAmount; } /** * Sets the checkAmount attribute value. */ public void setCheckAmount(KualiDecimal checkAmount) { this.checkAmount = checkAmount; } /** * @see java.lang.Object#toString() */ @Override public String toString() { return "CRSummary " + getDocumentNumber(); } /** * @return the cashAmount */ public KualiDecimal getCashAmount() { return cashAmount; } /** * @param cashAmount the cashAmount to set */ public void setCashAmount(KualiDecimal cashAmount) { this.cashAmount = cashAmount; } /** * @return the documentStatusCode */ public String getDocumentStatusCode() { return documentStatusCode; } /** * @param documentStatusCode the documentStatusCode to set */ public void setDocumentStatusCode(String documentStatusCode) { this.documentStatusCode = documentStatusCode; } } public static final class CashDrawerSummary implements Serializable { protected Timestamp timeOpened; protected Timestamp timeRefreshed; // directly calculated protected int overallReceiptCount; protected int depositedReceiptCount; protected CashReceiptStatistics verifiedReceiptStats = new CashReceiptStatistics(); protected CashReceiptStatistics interimReceiptStats = new CashReceiptStatistics(); protected CashReceiptStatistics finalReceiptStats = new CashReceiptStatistics(); protected CashReceiptStatistics overallReceiptStats = new CashReceiptStatistics(); // derived protected KualiDecimal verifiedReceiptSumTotal; protected KualiDecimal interimReceiptSumTotal; protected KualiDecimal finalReceiptSumTotal; protected KualiDecimal overallReceiptSumTotal; protected KualiDecimal remainingCheckTotal; protected KualiDecimal remainingCurrencyTotal; protected KualiDecimal remainingCoinTotal; protected KualiDecimal remainingSumTotal; protected boolean isDepositsFinal = false; protected KualiDecimal cashieringChecksTotal; protected KualiDecimal depositedCashieringChecksTotal; protected KualiDecimal undepositedCashieringChecksTotal; protected KualiDecimal cashDrawerCurrencyTotal; protected KualiDecimal cashDrawerCoinTotal; protected KualiDecimal openItemsTotal; protected KualiDecimal cashDrawerTotal; protected KualiDecimal interimDepositedCashieringChecksTotal; protected KualiDecimal finalDepositedCashieringChecksTotal; public CashDrawerSummary(CashManagementDocument cmDoc) { timeOpened = new Timestamp(cmDoc.getDocumentHeader().getWorkflowDocument().getDateCreated().getMillis()); resummarize(cmDoc); } public CashDrawerSummary() { } protected static final String[] INTERESTING_STATII = { CashReceipt.VERIFIED, CashReceipt.INTERIM, CashReceipt.FINAL }; public void resummarize(CashManagementDocument cmDoc) { // // get all interesting CRs String campusCode = cmDoc.getCampusCode(); List<CashReceiptDocument> interestingReceipts = SpringContext.getBean(CashReceiptService.class).getCashReceipts(campusCode, INTERESTING_STATII); // // rather than separating into lists by status, gather statistics in one fell swoop overallReceiptStats.clear(); verifiedReceiptStats.clear(); interimReceiptStats.clear(); finalReceiptStats.clear(); for (CashReceiptDocument receipt : interestingReceipts) { String status = receipt.getFinancialSystemDocumentHeader().getFinancialDocumentStatusCode(); overallReceiptStats.add(receipt); if (status.equals(CashReceipt.VERIFIED)) { verifiedReceiptStats.add(receipt); } else if (status.equals(CashReceipt.INTERIM)) { interimReceiptStats.add(receipt); } else if (status.equals(CashReceipt.FINAL)) { finalReceiptStats.add(receipt); } else { throw new IllegalStateException("invalid (unknown) financialDocumentStatusCode '" + status + "'"); } } overallReceiptCount = overallReceiptStats.getReceiptCount(); depositedReceiptCount = interimReceiptStats.getReceiptCount() + finalReceiptStats.getReceiptCount(); // get cash drawer summary info depositedCashieringChecksTotal = calculateDepositedCashieringChecksTotal(cmDoc); undepositedCashieringChecksTotal = calculateUndepositedCashieringChecksTotal(cmDoc); cashieringChecksTotal = depositedCashieringChecksTotal.add(undepositedCashieringChecksTotal); openItemsTotal = calculateOpenItemsTotal(cmDoc); cashDrawerCurrencyTotal = cmDoc.getCashDrawer().getCurrencyTotalAmount(); cashDrawerCoinTotal = cmDoc.getCashDrawer().getCoinTotalAmount(); cashDrawerTotal = undepositedCashieringChecksTotal.add(openItemsTotal.add(cashDrawerCurrencyTotal.add(cashDrawerCoinTotal))); Map<String, KualiDecimal> results = calculateDepositedCashieringChecksTotalByDepositType(cmDoc); interimDepositedCashieringChecksTotal = results.get(DepositConstants.DEPOSIT_TYPE_INTERIM); KualiDecimal finalDepositCashTotal = KualiDecimal.ZERO; Map<Class, Object> finalDepositCashDetails = SpringContext.getBean(CashManagementService.class).getCashDetailsForFinalDeposit(cmDoc.getDocumentNumber()); KualiDecimal currencyDepositAmount = KualiDecimal.ZERO; if (finalDepositCashDetails.get(CurrencyDetail.class) != null) { currencyDepositAmount = ((CurrencyDetail) finalDepositCashDetails.get(CurrencyDetail.class)).getTotalAmount(); } KualiDecimal coinDepositAmount = KualiDecimal.ZERO; if (finalDepositCashDetails.get(CoinDetail.class) != null) { coinDepositAmount = ((CoinDetail) finalDepositCashDetails.get(CoinDetail.class)).getTotalAmount(); } finalDepositCashTotal = finalDepositCashTotal.add(currencyDepositAmount).add(coinDepositAmount); finalDepositedCashieringChecksTotal = results.get(DepositConstants.DEPOSIT_TYPE_FINAL).add(finalDepositCashTotal); verifiedReceiptSumTotal = verifiedReceiptStats.getSumTotal(); interimReceiptSumTotal = interimReceiptStats.getCheckTotal().add(interimDepositedCashieringChecksTotal); finalReceiptSumTotal = finalReceiptStats.getCheckTotal().add(finalDepositedCashieringChecksTotal); overallReceiptSumTotal = overallReceiptStats.getSumTotal(); remainingCheckTotal = overallReceiptStats.getCheckTotal().subtract(interimReceiptStats.getCheckTotal()).subtract(finalReceiptStats.getCheckTotal()); remainingCurrencyTotal = overallReceiptStats.getCurrencyTotal().subtract(currencyDepositAmount).subtract(depositedCashieringChecksTotal); remainingCoinTotal = overallReceiptStats.getCoinTotal().subtract(coinDepositAmount); remainingSumTotal = remainingCheckTotal.add(remainingCurrencyTotal.add(remainingCoinTotal)); isDepositsFinal = cmDoc.hasFinalDeposit(); timeRefreshed = SpringContext.getBean(DateTimeService.class).getCurrentTimestamp(); } protected KualiDecimal calculateDepositedCashieringChecksTotal(CashManagementDocument cmDoc) { return SpringContext.getBean(CashManagementService.class).calculateDepositedCheckTotal(cmDoc.getDocumentNumber()); } protected KualiDecimal calculateUndepositedCashieringChecksTotal(CashManagementDocument cmDoc) { return SpringContext.getBean(CashManagementService.class).calculateUndepositedCheckTotal(cmDoc.getDocumentNumber()); } protected KualiDecimal calculateOpenItemsTotal(CashManagementDocument cmDoc) { KualiDecimal total = KualiDecimal.ZERO; for (CashieringItemInProcess itemInProcess : SpringContext.getBean(CashManagementService.class).getOpenItemsInProcess(cmDoc)) { if (itemInProcess.getItemRemainingAmount() != null) { total = total.add(itemInProcess.getItemRemainingAmount()); } } return total; } protected Map<String, KualiDecimal> calculateDepositedCashieringChecksTotalByDepositType(CashManagementDocument cmDoc) { Map<String, KualiDecimal> result = new HashMap<String, KualiDecimal>(); result.put(DepositConstants.DEPOSIT_TYPE_INTERIM, KualiDecimal.ZERO); result.put(DepositConstants.DEPOSIT_TYPE_FINAL, KualiDecimal.ZERO); // 1. get all deposited cashiering checks List<Check> checks = SpringContext.getBean(CashManagementService.class).selectDepositedCashieringChecks(cmDoc.getDocumentNumber()); // 2. get all deposits List<Deposit> deposits = cmDoc.getDeposits(); Map<Integer, String> depositTypes = new HashMap<Integer, String>(); for (Deposit deposit : deposits) { depositTypes.put(deposit.getFinancialDocumentDepositLineNumber(), deposit.getDepositTypeCode()); } // 3. now, go through all cashiering checks, totalling them to the right deposit type for (Check check : checks) { KualiDecimal properTotal = result.get(depositTypes.get(check.getFinancialDocumentDepositLineNumber())); properTotal = properTotal.add(check.getAmount()); result.put(depositTypes.get(check.getFinancialDocumentDepositLineNumber()), properTotal); } return result; } /** * @return current value of depositedReceiptCount. */ public int getDepositedReceiptCount() { return depositedReceiptCount; } /** * Sets the depositedReceiptCount attribute value. * * @param depositedReceiptCount The depositedReceiptCount to set. */ public void setDepositedReceiptCount(int depositedReceiptCount) { this.depositedReceiptCount = depositedReceiptCount; } /** * @return current value of finalReceiptSumTotal. */ public KualiDecimal getFinalReceiptSumTotal() { return finalReceiptSumTotal; } /** * Sets the finalReceiptSumTotal attribute value. * * @param finalReceiptSumTotal The finalReceiptSumTotal to set. */ public void setFinalReceiptSumTotal(KualiDecimal finalSumTotal) { this.finalReceiptSumTotal = finalSumTotal; } /** * @return current value of interimReceiptSumTotal. */ public KualiDecimal getInterimReceiptSumTotal() { return interimReceiptSumTotal; } /** * Sets the interimReceiptSumTotal attribute value. * * @param interimReceiptSumTotal The interimReceiptSumTotal to set. */ public void setInterimReceiptSumTotal(KualiDecimal interimSumTotal) { this.interimReceiptSumTotal = interimSumTotal; } /** * @return current value of overallReceiptCount. */ public int getOverallReceiptCount() { return overallReceiptCount; } /** * Sets the overallReceiptCount attribute value. * * @param overallReceiptCount The overallReceiptCount to set. */ public void setOverallReceiptCount(int overallReceiptCount) { this.overallReceiptCount = overallReceiptCount; } /** * @return current value of remainingCheckTotal. */ public KualiDecimal getRemainingCheckTotal() { return remainingCheckTotal; } /** * Sets the remainingCheckTotal attribute value. * * @param remainingCheckTotal The remainingCheckTotal to set. */ public void setRemainingCheckTotal(KualiDecimal remainingCheckTotal) { this.remainingCheckTotal = remainingCheckTotal; } /** * @return current value of remainingCoinTotal. */ public KualiDecimal getRemainingCoinTotal() { return remainingCoinTotal; } /** * Sets the remainingCoinTotal attribute value. * * @param remainingCoinTotal The remainingCoinTotal to set. */ public void setRemainingCoinTotal(KualiDecimal remainingCoinTotal) { this.remainingCoinTotal = remainingCoinTotal; } /** * @return current value of remainingCurrencyTotal. */ public KualiDecimal getRemainingCurrencyTotal() { return remainingCurrencyTotal; } /** * Sets the remainingCurrencyTotal attribute value. * * @param remainingCurrencyTotal The remainingCurrencyTotal to set. */ public void setRemainingCurrencyTotal(KualiDecimal remainingCurrencyTotal) { this.remainingCurrencyTotal = remainingCurrencyTotal; } /** * @return current value of remainingSumTotal. */ public KualiDecimal getRemainingSumTotal() { return remainingSumTotal; } /** * Sets the remainingSumTotal attribute value. * * @param remainingSumTotal The remainingSumTotal to set. */ public void setRemainingSumTotal(KualiDecimal remainingSumTotal) { this.remainingSumTotal = remainingSumTotal; } /** * @return current value of timeOpened. */ public Timestamp getTimeOpened() { return timeOpened; } /** * Sets the timeOpened attribute value. * * @param timeOpened The timeOpened to set. */ public void setTimeOpened(Timestamp timeOpened) { this.timeOpened = timeOpened; } /** * @return current value of timeRefreshed. */ public Timestamp getTimeRefreshed() { return timeRefreshed; } /** * Sets the timeRefreshed attribute value. * * @param timeRefreshed The timeRefreshed to set. */ public void setTimeRefreshed(Timestamp timeRefreshed) { this.timeRefreshed = timeRefreshed; } /** * @return current value of verifiedReceiptSumTotal. */ public KualiDecimal getVerifiedReceiptSumTotal() { return verifiedReceiptSumTotal; } /** * Sets the verifiedReceiptSumTotal attribute value. * * @param verifiedReceiptSumTotal The verifiedReceiptSumTotal to set. */ public void setVerifiedReceiptSumTotal(KualiDecimal verifiedSumTotal) { this.verifiedReceiptSumTotal = verifiedSumTotal; } /** * @return current value of overallReceiptSumTotal. */ public KualiDecimal getOverallReceiptSumTotal() { return overallReceiptSumTotal; } /** * Sets the overallReceiptSumTotal attribute value. * * @param overallReceiptSumTotal The overallReceiptSumTotal to set. */ public void setOverallReceiptSumTotal(KualiDecimal overallSumTotal) { this.overallReceiptSumTotal = overallSumTotal; } /** * @return current value of finalReceiptStats. */ public CashReceiptStatistics getFinalReceiptStats() { return finalReceiptStats; } /** * @return current value of interimReceiptStats. */ public CashReceiptStatistics getInterimReceiptStats() { return interimReceiptStats; } /** * @return current value of verifiedReceiptStats. */ public CashReceiptStatistics getVerifiedReceiptStats() { return verifiedReceiptStats; } /** * Gets the cashDrawerCoinTotal attribute. * * @return Returns the cashDrawerCoinTotal. */ public KualiDecimal getCashDrawerCoinTotal() { return cashDrawerCoinTotal; } /** * Gets the cashDrawerCurrencyTotal attribute. * * @return Returns the cashDrawerCurrencyTotal. */ public KualiDecimal getCashDrawerCurrencyTotal() { return cashDrawerCurrencyTotal; } /** * Gets the cashDrawerTotal attribute. * * @return Returns the cashDrawerTotal. */ public KualiDecimal getCashDrawerTotal() { return cashDrawerTotal; } /** * Gets the cashieringChecksTotal attribute. * * @return Returns the cashieringChecksTotal. */ public KualiDecimal getCashieringChecksTotal() { return cashieringChecksTotal; } /** * Sets the cashieringChecksTotal attribute value. * * @param cashieringChecksTotal The cashieringChecksTotal to set. */ public void setCashieringChecksTotal(KualiDecimal cashieringChecksTotal) { this.cashieringChecksTotal = cashieringChecksTotal; } /** * Sets the depositedCashieringChecksTotal attribute value. * * @param depositedCashieringChecksTotal The depositedCashieringChecksTotal to set. */ public void setDepositedCashieringChecksTotal(KualiDecimal depositedCashieringChecksTotal) { this.depositedCashieringChecksTotal = depositedCashieringChecksTotal; } /** * Gets the isDepositsFinal attribute. * * @return Returns the isDepositsFinal. */ public boolean isDepositsFinal() { return isDepositsFinal; } /** * Sets the cashDrawerCoinTotal attribute value. * * @param cashDrawerCoinTotal The cashDrawerCoinTotal to set. */ public void setCashDrawerCoinTotal(KualiDecimal cashDrawerCoinTotal) { this.cashDrawerCoinTotal = cashDrawerCoinTotal; } /** * Sets the cashDrawerCurrencyTotal attribute value. * * @param cashDrawerCurrencyTotal The cashDrawerCurrencyTotal to set. */ public void setCashDrawerCurrencyTotal(KualiDecimal cashDrawerCurrencyTotal) { this.cashDrawerCurrencyTotal = cashDrawerCurrencyTotal; } /** * Sets the cashDrawerTotal attribute value. * * @param cashDrawerTotal The cashDrawerTotal to set. */ public void setCashDrawerTotal(KualiDecimal cashDrawerTotal) { this.cashDrawerTotal = cashDrawerTotal; } /** * Sets the openItemsTotal attribute value. * * @param openItemsTotal The openItemsTotal to set. */ public void setOpenItemsTotal(KualiDecimal openItemsTotal) { this.openItemsTotal = openItemsTotal; } /** * Sets the undepositedCashieringChecksTotal attribute value. * * @param undepositedCashieringChecksTotal The undepositedCashieringChecksTotal to set. */ public void setUndepositedCashieringChecksTotal(KualiDecimal undepositedCashieringChecksTotal) { this.undepositedCashieringChecksTotal = undepositedCashieringChecksTotal; } /** * Gets the openItemsTotal attribute. * * @return Returns the openItemsTotal. */ public KualiDecimal getOpenItemsTotal() { return openItemsTotal; } /** * Gets the depositedCashieringChecksTotal attribute. * * @return Returns the depositedCashieringChecksTotal. */ public KualiDecimal getDepositedCashieringChecksTotal() { return depositedCashieringChecksTotal; } /** * Gets the undepositedCashieringChecksTotal attribute. * * @return Returns the undepositedCashieringChecksTotal. */ public KualiDecimal getUndepositedCashieringChecksTotal() { return undepositedCashieringChecksTotal; } /** * @return current value of overalllStats. */ public CashReceiptStatistics getOverallReceiptStats() { return overallReceiptStats; } public static final class CashReceiptStatistics implements Serializable{ protected int receiptCount; protected KualiDecimal checkTotal; protected KualiDecimal currencyTotal; protected KualiDecimal coinTotal; /** * Constructs a SubSummary. */ public CashReceiptStatistics() { clear(); } /** * Increments the counter by 1, and the various totals by the amounts in the given CashReceiptDocument * * @param receipt */ public void add(CashReceiptDocument receipt) { receipt.refreshCashDetails(); receiptCount++; checkTotal = checkTotal.add(receipt.getTotalConfirmedCheckAmount()); currencyTotal = currencyTotal.add(receipt.getTotalConfirmedNetCurrencyAmount()); coinTotal = coinTotal.add(receipt.getTotalConfirmedNetCoinAmount()); } /** * Zeros counter and totals. */ public void clear() { receiptCount = 0; checkTotal = KualiDecimal.ZERO; currencyTotal = KualiDecimal.ZERO; coinTotal = KualiDecimal.ZERO; } /** * Returns total of all check, coin, and currency totals */ public KualiDecimal getSumTotal() { KualiDecimal sumTotal = getCheckTotal().add(getCoinTotal().add(getCurrencyTotal())); return sumTotal; } /** * This method doesn't do anything but appease the demands of POJO form population...I mean...er...this sets the sum * total, now doesn't it? * * @param total total you want this method to ignore */ public void setSumTotal(KualiDecimal total) { // don't do anything. just be very quiet and maybe the POJO loader will be satisfied } /** * @return current value of checkTotal. */ public KualiDecimal getCheckTotal() { return checkTotal; } /** * Sets the checkTotal attribute value. * * @param checkTotal The checkTotal to set. */ public void setCheckTotal(KualiDecimal checkTotal) { this.checkTotal = checkTotal; } /** * @return current value of coinTotal. */ public KualiDecimal getCoinTotal() { return coinTotal; } /** * Sets the coinTotal attribute value. * * @param coinTotal The coinTotal to set. */ public void setCoinTotal(KualiDecimal coinTotal) { this.coinTotal = coinTotal; } /** * @return current value of currencyTotal. */ public KualiDecimal getCurrencyTotal() { return currencyTotal; } /** * Sets the currencyTotal attribute value. * * @param currencyTotal The currencyTotal to set. */ public void setCurrencyTotal(KualiDecimal currencyTotal) { this.currencyTotal = currencyTotal; } /** * @return current value of receiptCount. */ public int getReceiptCount() { return receiptCount; } /** * Sets the receiptCount attribute value. * * @param receiptCount The receiptCount to set. */ public void setReceiptCount(int receiptCount) { this.receiptCount = receiptCount; } /** * @see java.lang.Object#toString() */ @Override public String toString() { return "CashDrawerSummary(" + getSumTotal() + " = " + getCheckTotal() + " + " + getCurrencyTotal() + " + " + getCoinTotal() + ")"; } } } /** * @see org.kuali.rice.kns.web.struts.pojo.PojoFormBase#postprocessRequestParameters(java.util.Map) */ @Override public void postprocessRequestParameters(Map requestParameters) { super.postprocessRequestParameters(requestParameters); // fish the campus code name out of the parameters String[] campusCodes = (String[]) requestParameters.get(CashManagementForm.CAMPUS_CODE_PROPERTY); String campusCode = null; if (campusCodes != null && campusCodes.length > 0) { campusCode = campusCodes[0]; } if (campusCode != null && getCashManagementDocument() != null) { // use that to put the cash drawer back into the cash management document getCashManagementDocument().setCashDrawer(SpringContext.getBean(CashDrawerService.class).getByCampusCode(campusCode)); } } }