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.ld.document.web.struts;
017    
018    import java.util.Map;
019    
020    import javax.servlet.http.HttpServletRequest;
021    
022    import org.kuali.kfs.module.ld.LaborPropertyConstants;
023    import org.kuali.kfs.module.ld.businessobject.LaborAccountingLineOverride;
024    import org.kuali.kfs.sys.KFSPropertyConstants;
025    import org.kuali.kfs.sys.businessobject.AccountingLine;
026    import org.kuali.kfs.sys.businessobject.SourceAccountingLine;
027    import org.kuali.kfs.sys.businessobject.TargetAccountingLine;
028    import org.kuali.kfs.sys.context.SpringContext;
029    import org.kuali.kfs.sys.service.OptionsService;
030    import org.kuali.rice.kns.util.KNSConstants;
031    
032    /**
033     * Base Struts Action Form for all expense transfer documents.
034     */
035    public abstract class ExpenseTransferDocumentFormBase extends LaborDocumentFormBase implements MultipleValueLookupBroker {
036    
037        protected String lookupResultsSequenceNumber; // Indicates which result set we are using when refreshing/returning from a
038                                                    // multi-value lookup.
039        protected String lookupResultsBOClassName; // Type of result returned by the multi-value lookup. ?to be persisted in the lookup
040                                                    // results service instead?
041        protected String lookedUpCollectionName; // The name of the collection looked up (by a multiple value lookup)
042        protected Integer universityFiscalYear;
043    
044        /**
045         * Constructs a ExpenseTransferDocumentFormBase instance for the dependent object.
046         */
047        public ExpenseTransferDocumentFormBase() {
048            super();
049            setUniversityFiscalYear(SpringContext.getBean(OptionsService.class).getCurrentYearOptions().getUniversityFiscalYear());
050        }
051    
052        @Override
053        public void addRequiredNonEditableProperties() {
054            super.addRequiredNonEditableProperties();
055            registerRequiredNonEditableProperty(KNSConstants.LOOKUP_RESULTS_SEQUENCE_NUMBER);
056        }
057    
058        /**
059         * @see org.kuali.kfs.module.ld.document.web.struts.MultipleValueLookupBroker#getLookupResultsSequenceNumber()
060         */
061        public String getLookupResultsSequenceNumber() {
062            return lookupResultsSequenceNumber;
063        }
064    
065        /**
066         * @see org.kuali.kfs.module.ld.document.web.struts.MultipleValueLookupBroker#setLookupResultsSequenceNumber(java.lang.String)
067         */
068        public void setLookupResultsSequenceNumber(String lookupResultsSequenceNumber) {
069            this.lookupResultsSequenceNumber = lookupResultsSequenceNumber;
070        }
071    
072        /**
073         * @see org.kuali.kfs.module.ld.document.web.struts.MultipleValueLookupBroker#getLookupResultsBOClassName()
074         */
075        public String getLookupResultsBOClassName() {
076            return lookupResultsBOClassName;
077        }
078    
079        /**
080         * @see org.kuali.kfs.module.ld.document.web.struts.MultipleValueLookupBroker#setLookupResultsBOClassName(java.lang.String)
081         */
082        public void setLookupResultsBOClassName(String lookupResultsBOClassName) {
083            this.lookupResultsBOClassName = lookupResultsBOClassName;
084        }
085    
086        /**
087         * @see org.kuali.kfs.module.ld.document.web.struts.MultipleValueLookupBroker#getLookedUpCollectionName()
088         */
089        public String getLookedUpCollectionName() {
090            return lookedUpCollectionName;
091        }
092    
093        /**
094         * @see org.kuali.kfs.module.ld.document.web.struts.MultipleValueLookupBroker#setLookedUpCollectionName(java.lang.String)
095         */
096        public void setLookedUpCollectionName(String lookedUpCollectionName) {
097            this.lookedUpCollectionName = lookedUpCollectionName;
098        }
099    
100        /**
101         * Gets the universityFiscalYear attribute.
102         * 
103         * @return Returns the universityFiscalYear.
104         */
105        public Integer getUniversityFiscalYear() {
106            return universityFiscalYear;
107        }
108    
109        /**
110         * Sets the universityFiscalYear attribute value.
111         * 
112         * @param universityFiscalYear The universityFiscalYear to set.
113         */
114        public void setUniversityFiscalYear(Integer universityFiscalYear) {
115            this.universityFiscalYear = universityFiscalYear;
116        }
117    
118        /**
119         * Populate the search fields with the last search criteria
120         */
121        public abstract void populateSearchFields();
122    
123        /**
124         * Gets forced read only source fields
125         * 
126         * @return Returns a Map of read only source fields
127         */
128        public Map getForcedReadOnlySourceFields() {
129            Map map = super.getForcedReadOnlyFields();
130            map.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, Boolean.TRUE);
131            map.put(KFSPropertyConstants.ACCOUNT_NUMBER, Boolean.TRUE);
132            map.put(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, Boolean.TRUE);
133            map.put(KFSPropertyConstants.FINANCIAL_OBJECT_CODE, Boolean.TRUE);
134            map.put(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE, Boolean.TRUE);
135            map.put(KFSPropertyConstants.PROJECT_CODE, Boolean.TRUE);
136            map.put(KFSPropertyConstants.ORGANIZATION_REFERENCE_ID, Boolean.TRUE);
137            map.put(KFSPropertyConstants.POSITION_NUMBER, Boolean.TRUE);
138            map.put(LaborPropertyConstants.PAYROLL_END_DATE_FISCAL_PERIOD_CODE, Boolean.TRUE);
139            map.put(LaborPropertyConstants.PAYROLL_END_DATE_FISCAL_YEAR, Boolean.TRUE);
140            return map;
141        }
142    
143        /**
144         * Returns forced read only target fields (i.e read only fields plus payroll end date fiscal 
145         * period code and payroll end date fiscal year)
146         * 
147         * @see org.kuali.rice.kns.web.struts.form.KualiTransactionalDocumentFormBase#getForcedReadOnlyFields()
148         */
149        public Map getForcedReadOnlyTargetFields() {
150            Map map = super.getForcedReadOnlyFields();
151            map.put(LaborPropertyConstants.PAYROLL_END_DATE_FISCAL_PERIOD_CODE, Boolean.TRUE);
152            map.put(LaborPropertyConstants.PAYROLL_END_DATE_FISCAL_YEAR, Boolean.TRUE);
153            return map;
154        }
155    
156        /**
157         * Deal with the labor-specific override code to the given source accounting line
158         * 
159         * @see org.kuali.kfs.sys.web.struts.KualiAccountingDocumentFormBase#populateSourceAccountingLine(org.kuali.kfs.sys.businessobject.SourceAccountingLine)
160         */
161        @Override
162        public void populateSourceAccountingLine(SourceAccountingLine sourceLine, String accountingLinePropertyName, Map parameterMap) {
163            super.populateSourceAccountingLine(sourceLine, accountingLinePropertyName, parameterMap);
164            LaborAccountingLineOverride.populateFromInput(sourceLine);
165        }
166    
167        /**
168         * Deal with the labor-specific override code to the given target accounting line
169         * 
170         * @see org.kuali.kfs.sys.web.struts.KualiAccountingDocumentFormBase#populateTargetAccountingLine(org.kuali.kfs.sys.businessobject.TargetAccountingLine)
171         */
172        @Override
173        public void populateTargetAccountingLine(TargetAccountingLine targetLine, String accountingLinePropertyName, Map parameterMap) {
174            super.populateTargetAccountingLine(targetLine, accountingLinePropertyName, parameterMap);
175            LaborAccountingLineOverride.populateFromInput(targetLine);
176        }
177    
178        /**
179         * @see org.kuali.kfs.sys.web.struts.KualiAccountingDocumentFormBase#repopulateOverrides(org.kuali.kfs.sys.businessobject.AccountingLine, java.lang.String, javax.servlet.http.HttpServletRequest)
180         */
181        @Override
182        protected void repopulateOverrides(AccountingLine line, String accountingLinePropertyName, Map parameterMap) {
183            super.repopulateOverrides(line, accountingLinePropertyName, parameterMap);
184            LaborAccountingLineOverride.determineNeededOverrides(line);
185            if (line.getNonFringeAccountOverrideNeeded()) {
186                if (parameterMap.containsKey(accountingLinePropertyName+".nonFringeAccountOverride.present")) {
187                    line.setNonFringeAccountOverride(parameterMap.containsKey(accountingLinePropertyName+".nonFringeAccountOverride"));
188                }
189            } else {
190                line.setNonFringeAccountOverride(false);
191            }
192        }
193        
194    }