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.Iterator;
019
020 import javax.servlet.http.HttpServletRequest;
021 import javax.servlet.http.HttpServletResponse;
022
023 import org.apache.struts.action.ActionForm;
024 import org.apache.struts.action.ActionForward;
025 import org.apache.struts.action.ActionMapping;
026 import org.kuali.kfs.fp.businessobject.AdvanceDepositDetail;
027 import org.kuali.kfs.fp.document.AdvanceDepositDocument;
028 import org.kuali.kfs.fp.document.validation.impl.AdvanceDepositDocumentRuleUtil;
029 import org.kuali.kfs.sys.KFSConstants;
030 import org.kuali.kfs.sys.KFSPropertyConstants;
031 import org.kuali.kfs.sys.web.struts.KualiAccountingDocumentActionBase;
032 import org.kuali.rice.kns.util.GlobalVariables;
033 import org.kuali.rice.kns.util.KualiDecimal;
034
035 /**
036 * This is the action class for the Advance Deposit document.
037 */
038 public class AdvanceDepositAction extends KualiAccountingDocumentActionBase {
039 /**
040 * Adds handling for advance deposit detail amount updates.
041 *
042 * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm,
043 * javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
044 */
045 public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
046 AdvanceDepositForm adForm = (AdvanceDepositForm) form;
047
048 if (adForm.hasDocumentId()) {
049 AdvanceDepositDocument adDoc = adForm.getAdvanceDepositDocument();
050
051 adDoc.setTotalAdvanceDepositAmount(calculateAdvanceDepositTotal(adDoc)); // recalc b/c changes to the amounts could
052 // have happened
053 }
054
055 // proceed as usual
056 return super.execute(mapping, form, request, response);
057 }
058
059 /**
060 * Adds a AdvanceDepositDetail instance created from the current "new advanceDeposit" line to the document
061 *
062 * @param mapping
063 * @param form
064 * @param request
065 * @param response
066 * @return ActionForward
067 * @throws Exception
068 */
069 public ActionForward addAdvanceDeposit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
070 AdvanceDepositForm adForm = (AdvanceDepositForm) form;
071 AdvanceDepositDocument adDoc = adForm.getAdvanceDepositDocument();
072
073 AdvanceDepositDetail newAdvanceDeposit = adForm.getNewAdvanceDeposit();
074 adDoc.prepareNewAdvanceDeposit(newAdvanceDeposit);
075
076 // advanceDeposit business rules
077 boolean rulePassed = validateNewAdvanceDeposit(newAdvanceDeposit);
078 if (rulePassed) {
079 // add advanceDeposit
080 adDoc.addAdvanceDeposit(newAdvanceDeposit);
081
082 // clear the used advanceDeposit
083 AdvanceDepositDetail advanceDepositDetail = new AdvanceDepositDetail();
084 advanceDepositDetail.setDefautBankCode();
085 adForm.setNewAdvanceDeposit(advanceDepositDetail);
086 }
087
088 return mapping.findForward(KFSConstants.MAPPING_BASIC);
089 }
090
091 /**
092 * Deletes the selected advanceDeposit (line) from the document
093 *
094 * @param mapping
095 * @param form
096 * @param request
097 * @param response
098 * @return ActionForward
099 * @throws Exception
100 */
101 public ActionForward deleteAdvanceDeposit(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
102 AdvanceDepositForm adForm = (AdvanceDepositForm) form;
103 AdvanceDepositDocument adDoc = adForm.getAdvanceDepositDocument();
104
105 int deleteIndex = getLineToDelete(request);
106 // delete advanceDeposit
107 adDoc.removeAdvanceDeposit(deleteIndex);
108
109 return mapping.findForward(KFSConstants.MAPPING_BASIC);
110 }
111
112 /**
113 * This method validates a new advance deposit detail record.
114 *
115 * @param advanceDeposit
116 * @return boolean
117 */
118 protected boolean validateNewAdvanceDeposit(AdvanceDepositDetail advanceDeposit) {
119 GlobalVariables.getMessageMap().addToErrorPath(KFSPropertyConstants.NEW_ADVANCE_DEPOSIT);
120 boolean isValid = AdvanceDepositDocumentRuleUtil.validateAdvanceDeposit(advanceDeposit);
121 GlobalVariables.getMessageMap().removeFromErrorPath(KFSPropertyConstants.NEW_ADVANCE_DEPOSIT);
122 return isValid;
123 }
124
125 /**
126 * Recalculates the advance deposit total since user could have changed it during their update.
127 *
128 * @param advanceDepositDocument
129 */
130 protected KualiDecimal calculateAdvanceDepositTotal(AdvanceDepositDocument advanceDepositDocument) {
131 KualiDecimal total = KualiDecimal.ZERO;
132 Iterator<AdvanceDepositDetail> deposits = advanceDepositDocument.getAdvanceDeposits().iterator();
133 while (deposits.hasNext()) {
134 AdvanceDepositDetail deposit = deposits.next();
135 total = total.add(deposit.getFinancialDocumentAdvanceDepositAmount());
136 }
137 return total;
138 }
139 }