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    
020    import org.kuali.kfs.module.ar.businessobject.CashControlDetail;
021    import org.kuali.kfs.module.ar.document.CashControlDocument;
022    import org.kuali.kfs.sys.context.SpringContext;
023    import org.kuali.kfs.sys.document.web.struts.FinancialSystemTransactionalDocumentFormBase;
024    import org.kuali.rice.kew.exception.WorkflowException;
025    import org.kuali.rice.kns.document.Document;
026    import org.kuali.rice.kns.service.DocumentService;
027    import org.kuali.rice.kns.util.GlobalVariables;
028    import org.kuali.rice.kns.workflow.service.KualiWorkflowDocument;
029    
030    public class CashControlDocumentForm extends FinancialSystemTransactionalDocumentFormBase {
031        protected static final org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(CashControlDocumentForm.class);
032    
033        protected CashControlDetail newCashControlDetail;
034        protected String processingChartOfAccCodeAndOrgCode;
035        
036        protected boolean cashPaymentMediumSelected;
037    
038        /**
039         * Constructs a CashControlDocumentForm.java.
040         */
041        public CashControlDocumentForm() {
042    
043            super();
044    
045        }
046    
047        @Override
048        protected String getDefaultDocumentTypeName() {
049            return "CTRL";
050        }
051        
052        /**
053         * @see org.kuali.rice.kns.web.struts.form.KualiDocumentFormBase#populate(javax.servlet.http.HttpServletRequest)
054         */
055        @Override
056        public void populate(HttpServletRequest request) {
057    
058            super.populate(request);
059    
060            CashControlDocument ccDoc = getCashControlDocument();
061    
062            if (hasDocumentId()) {
063    
064                // apply populate to PaymentApplicationDocuments
065                for (CashControlDetail cashControlDetail : ccDoc.getCashControlDetails()) {
066    
067                    // populate workflowDocument in documentHeader, if needed
068                    try {
069                        KualiWorkflowDocument workflowDocument = null;
070                        if (GlobalVariables.getUserSession().getWorkflowDocument(cashControlDetail.getReferenceFinancialDocumentNumber()) != null) {
071                            workflowDocument = GlobalVariables.getUserSession().getWorkflowDocument(cashControlDetail.getReferenceFinancialDocumentNumber());
072                        }
073                        else {
074                            // gets the workflow document from doc service, doc service will also set the workflow document in the
075                            // user's session
076                            Document retrievedDocument = SpringContext.getBean(DocumentService.class).getByDocumentHeaderId(cashControlDetail.getReferenceFinancialDocumentNumber());
077                            if (retrievedDocument == null) {
078                                throw new WorkflowException("Unable to get retrieve document # " + cashControlDetail.getReferenceFinancialDocumentNumber() + " from document service getByDocumentHeaderId");
079                            }
080                            workflowDocument = retrievedDocument.getDocumentHeader().getWorkflowDocument();
081                        }
082    
083                        cashControlDetail.getReferenceFinancialDocument().getDocumentHeader().setWorkflowDocument(workflowDocument);
084                    }
085                    catch (WorkflowException e) {
086                        LOG.warn("Error while instantiating workflowDoc", e);
087                        throw new RuntimeException("error populating documentHeader.workflowDocument", e);
088                    }
089                }
090            }
091    
092        }
093    
094        /**
095         * This method gets the cash control document
096         * 
097         * @return the CashControlDocument
098         */
099        public CashControlDocument getCashControlDocument() {
100            return (CashControlDocument) getDocument();
101        }
102    
103        /**
104         * This method gets the new cash control detail
105         * 
106         * @return cashControlDetail
107         */
108        public CashControlDetail getNewCashControlDetail() {
109            return newCashControlDetail;
110        }
111    
112        /**
113         * This method sets the new cash control detail
114         * 
115         * @param newCashControlDetail
116         */
117        public void setNewCashControlDetail(CashControlDetail newCashControlDetail) {
118            this.newCashControlDetail = newCashControlDetail;
119        }
120    
121        /**
122         * This method gets the processingChartOfAccCodeAndOrgCode
123         * 
124         * @return processingChartOfAccCodeAndOrgCode
125         */
126        public String getProcessingChartOfAccCodeAndOrgCode() {
127            return this.getCashControlDocument().getAccountsReceivableDocumentHeader().getProcessingChartOfAccCodeAndOrgCode();
128        }
129    
130        /**
131         * This method sets processingChartOfAccCodeAndOrgCode
132         * 
133         * @param processingChartOfAccCodeAndOrgCode
134         */
135        public void setProcessingChartOfAccCodeAndOrgCode(String processingChartOfAccCodeAndOrgCode) {
136            this.processingChartOfAccCodeAndOrgCode = processingChartOfAccCodeAndOrgCode;
137        }
138    
139        /**
140         * This method returns if payment medium is selected
141         * 
142         * @return true if payment medium selected, false otherwise
143         */
144        public boolean isCashPaymentMediumSelected() {
145            return cashPaymentMediumSelected;
146        }
147    
148        /**
149         * This method sets if payments medium is selected
150         * 
151         * @param cashPaymentMediumSelected
152         */
153        public void setCashPaymentMediumSelected(boolean cashPaymentMediumSelected) {
154            this.cashPaymentMediumSelected = cashPaymentMediumSelected;
155        }
156    
157    }