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.module.ar.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.module.ar.document.CustomerInvoiceWriteoffDocument;
025    import org.kuali.kfs.module.ar.document.service.CustomerInvoiceWriteoffDocumentService;
026    import org.kuali.kfs.module.ar.document.service.CustomerService;
027    import org.kuali.kfs.module.ar.document.validation.event.ContinueCustomerInvoiceWriteoffDocumentEvent;
028    import org.kuali.kfs.sys.KFSConstants;
029    import org.kuali.kfs.sys.context.SpringContext;
030    import org.kuali.kfs.sys.document.web.struts.FinancialSystemTransactionalDocumentActionBase;
031    import org.kuali.rice.kew.exception.WorkflowException;
032    import org.kuali.rice.kns.service.KualiRuleService;
033    import org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase;
034    
035    public class CustomerInvoiceWriteoffDocumentAction extends FinancialSystemTransactionalDocumentActionBase {
036        
037        /**
038         * @see org.kuali.rice.kns.web.struts.action.KualiDocumentActionBase#loadDocument(org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase)
039         */
040        @Override
041        protected void loadDocument(KualiDocumentFormBase kualiDocumentFormBase) throws WorkflowException {
042            super.loadDocument(kualiDocumentFormBase);
043    
044            CustomerInvoiceWriteoffDocumentForm form = (CustomerInvoiceWriteoffDocumentForm) kualiDocumentFormBase;
045            CustomerInvoiceWriteoffDocument document = (CustomerInvoiceWriteoffDocument) form.getDocument();
046            document.populateCustomerNote();
047        }
048    
049        /**
050         * @see org.kuali.rice.kns.web.struts.action.KualiDocumentActionBase#blanketApprove(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
051         */
052        @Override
053        public ActionForward blanketApprove(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
054            ActionForward actionForward = super.blanketApprove(mapping, form, request, response);
055            saveCustomerNote(form);
056            return actionForward;
057        }
058    
059        /**
060         * @see org.kuali.rice.kns.web.struts.action.KualiDocumentActionBase#route(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
061         */
062        @Override
063        public ActionForward route(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
064            ActionForward actionForward = super.route(mapping, form, request, response);
065            saveCustomerNote(form);
066            return actionForward;
067        }
068    
069        /**
070         * @see org.kuali.rice.kns.web.struts.action.KualiDocumentActionBase#save(org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
071         */
072        @Override
073        public ActionForward save(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
074            ActionForward actionForward = super.save(mapping, form, request, response);
075            saveCustomerNote(form);
076            return actionForward;
077        }
078        
079        
080        protected void saveCustomerNote(ActionForm form) {
081            CustomerService customerService = SpringContext.getBean(CustomerService.class);
082            
083            CustomerInvoiceWriteoffDocumentForm customerInvoiceWriteoffDocumentForm = (CustomerInvoiceWriteoffDocumentForm) form;
084            CustomerInvoiceWriteoffDocument customerInvoiceWriteoffDocument = (CustomerInvoiceWriteoffDocument) customerInvoiceWriteoffDocumentForm.getDocument();
085            
086            String customerNumber = customerInvoiceWriteoffDocument.getCustomerInvoiceDocument().getCustomer().getCustomerNumber();
087            String customerNote = customerInvoiceWriteoffDocument.getCustomerNote();
088            
089            customerService.createCustomerNote(customerNumber, customerNote);
090        }
091    
092        /**
093         * Do initialization for a new customer invoice writeoff document
094         * 
095         * TODO This initation stuff does the exact same thing as customer credit memo. this should really be abstracted out...
096         * 
097         * @see org.kuali.rice.kns.web.struts.action.KualiDocumentActionBase#createDocument(org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase)
098         */
099        @Override
100        protected void createDocument(KualiDocumentFormBase kualiDocumentFormBase) throws WorkflowException {
101            super.createDocument(kualiDocumentFormBase);
102            ((CustomerInvoiceWriteoffDocument) kualiDocumentFormBase.getDocument()).initiateDocument();
103        }
104        
105        /**
106         * Clears out init tab.
107         * 
108         * @param mapping An ActionMapping
109         * @param form An ActionForm
110         * @param request The HttpServletRequest
111         * @param response The HttpServletResponse
112         * @throws Exception
113         * @return An ActionForward
114         */
115        public ActionForward clearInitTab(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
116            
117            CustomerInvoiceWriteoffDocumentForm customerInvoiceWriteoffDocumentForm = (CustomerInvoiceWriteoffDocumentForm) form;
118            CustomerInvoiceWriteoffDocument customerInvoiceWriteoffDocument = (CustomerInvoiceWriteoffDocument) customerInvoiceWriteoffDocumentForm.getDocument();
119            customerInvoiceWriteoffDocument.clearInitFields();
120            
121            return super.refresh(mapping, form, request, response);
122        }   
123        
124        /**
125         * Handles continue request. This request comes from the initial screen which gives ref. invoice number.
126         * Based on that, the customer credit memo is initially populated.
127         * 
128         * @param mapping An ActionMapping
129         * @param form An ActionForm
130         * @param request The HttpServletRequest
131         * @param response The HttpServletResponse
132         * @throws Exception
133         * @return An ActionForward
134         */
135        public ActionForward continueCustomerInvoiceWriteoff(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws Exception {
136    
137            CustomerInvoiceWriteoffDocumentForm customerInvoiceWriteoffDocumentForm = (CustomerInvoiceWriteoffDocumentForm) form;
138            CustomerInvoiceWriteoffDocument customerInvoiceWriteoffDocument = (CustomerInvoiceWriteoffDocument) customerInvoiceWriteoffDocumentForm.getDocument();
139            
140            String errorPath = KFSConstants.DOCUMENT_PROPERTY_NAME;
141            boolean rulePassed = SpringContext.getBean(KualiRuleService.class).applyRules(new ContinueCustomerInvoiceWriteoffDocumentEvent(errorPath,customerInvoiceWriteoffDocument));
142            if (rulePassed){
143                SpringContext.getBean(CustomerInvoiceWriteoffDocumentService.class).setupDefaultValuesForNewCustomerInvoiceWriteoffDocument(customerInvoiceWriteoffDocument);
144            }
145    
146            return mapping.findForward(KFSConstants.MAPPING_BASIC);
147        }    
148    
149    }