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 javax.servlet.http.HttpServletRequest;
019    import javax.servlet.http.HttpServletResponse;
020    
021    import org.apache.struts.action.ActionForm;
022    import org.apache.struts.action.ActionForward;
023    import org.apache.struts.action.ActionMapping;
024    import org.kuali.kfs.fp.businessobject.CreditCardDetail;
025    import org.kuali.kfs.fp.document.CreditCardReceiptDocument;
026    import org.kuali.kfs.fp.document.validation.impl.CreditCardReceiptDocumentRuleUtil;
027    import org.kuali.kfs.sys.KFSConstants;
028    import org.kuali.kfs.sys.KFSPropertyConstants;
029    import org.kuali.kfs.sys.web.struts.KualiAccountingDocumentActionBase;
030    import org.kuali.rice.kns.util.GlobalVariables;
031    
032    /**
033     * This is the action class for the CreditCardReceiptDocument.
034     */
035    public class CreditCardReceiptAction extends KualiAccountingDocumentActionBase {
036        /**
037         * Adds handling for credit card receipt amount updates.
038         * 
039         * @see org.apache.struts.action.Action#execute(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm,
040         *      javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
041         */
042        public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
043            CreditCardReceiptForm ccrForm = (CreditCardReceiptForm) form;
044    
045            if (ccrForm.hasDocumentId()) {
046                CreditCardReceiptDocument ccrDoc = ccrForm.getCreditCardReceiptDocument();
047    
048                ccrDoc.setTotalCreditCardAmount(ccrDoc.calculateCreditCardReceiptTotal()); // recalc b/c changes to the amounts could
049                // have happened
050            }
051    
052            // proceed as usual
053            return super.execute(mapping, form, request, response);
054        }
055    
056        /**
057         * Adds a CreditCardDetail instance created from the current "new creditCardReceipt" line to the document
058         * 
059         * @param mapping
060         * @param form
061         * @param request
062         * @param response
063         * @return ActionForward
064         * @throws Exception
065         */
066        public ActionForward addCreditCardReceipt(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
067            CreditCardReceiptForm ccrForm = (CreditCardReceiptForm) form;
068            CreditCardReceiptDocument ccrDoc = ccrForm.getCreditCardReceiptDocument();
069    
070            CreditCardDetail newCreditCardReceipt = ccrForm.getNewCreditCardReceipt();
071            ccrDoc.prepareNewCreditCardReceipt(newCreditCardReceipt);
072    
073            // creditCardReceipt business rules
074            boolean rulePassed = validateNewCreditCardReceipt(newCreditCardReceipt);
075            if (rulePassed) {
076                // add creditCardReceipt
077                ccrDoc.addCreditCardReceipt(newCreditCardReceipt);
078    
079                // clear the used creditCardReceipt
080                ccrForm.setNewCreditCardReceipt(new CreditCardDetail());
081            }
082    
083            return mapping.findForward(KFSConstants.MAPPING_BASIC);
084        }
085    
086        /**
087         * Deletes the selected creditCardReceipt (line) from the document
088         * 
089         * @param mapping
090         * @param form
091         * @param request
092         * @param response
093         * @return ActionForward
094         * @throws Exception
095         */
096        public ActionForward deleteCreditCardReceipt(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
097            CreditCardReceiptForm ccrForm = (CreditCardReceiptForm) form;
098            CreditCardReceiptDocument ccrDoc = ccrForm.getCreditCardReceiptDocument();
099    
100            int deleteIndex = getLineToDelete(request);
101            // delete creditCardReceipt
102            ccrDoc.removeCreditCardReceipt(deleteIndex);
103    
104            return mapping.findForward(KFSConstants.MAPPING_BASIC);
105        }
106    
107        /**
108         * This method validates a new credit card receipt detail record.
109         * 
110         * @param creditCardReceipt
111         * @return boolean
112         */
113        protected boolean validateNewCreditCardReceipt(CreditCardDetail creditCardReceipt) {
114            GlobalVariables.getMessageMap().addToErrorPath(KFSPropertyConstants.NEW_CREDIT_CARD_RECEIPT);
115            boolean isValid = CreditCardReceiptDocumentRuleUtil.validateCreditCardReceipt(creditCardReceipt);
116            GlobalVariables.getMessageMap().removeFromErrorPath(KFSPropertyConstants.NEW_CREDIT_CARD_RECEIPT);
117            return isValid;
118        }
119    }