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.endow.document.authorization;
017
018 import java.util.List;
019 import java.util.Set;
020
021 import org.apache.commons.lang.StringUtils;
022 import org.kuali.kfs.module.endow.EndowConstants;
023 import org.kuali.kfs.module.endow.EndowPropertyConstants;
024 import org.kuali.kfs.module.endow.businessobject.FeeClassCode;
025 import org.kuali.kfs.module.endow.businessobject.FeeEndowmentTransactionCode;
026 import org.kuali.kfs.module.endow.businessobject.FeeMethod;
027 import org.kuali.kfs.module.endow.businessobject.FeePaymentType;
028 import org.kuali.kfs.module.endow.businessobject.FeeSecurity;
029 import org.kuali.kfs.module.endow.businessobject.FeeTransaction;
030 import org.kuali.kfs.module.endow.document.service.impl.FrequencyCodeServiceImpl;
031 import org.kuali.kfs.sys.context.SpringContext;
032 import org.kuali.kfs.sys.document.authorization.FinancialSystemMaintenanceDocumentPresentationControllerBase;
033 import org.kuali.rice.kns.datadictionary.MaintainableSectionDefinition;
034 import org.kuali.rice.kns.document.MaintenanceDocument;
035 import org.kuali.rice.kns.service.MaintenanceDocumentDictionaryService;
036
037 public class FeeMethodDocumentPresentationControllerForTabShowOrHide extends FinancialSystemMaintenanceDocumentPresentationControllerBase {
038
039 @Override
040 public Set<String> getConditionallyReadOnlyPropertyNames(MaintenanceDocument document) {
041 Set<String> readOnlyPropertyNames = super.getConditionallyReadOnlyPropertyNames(document);
042
043 FeeMethod feeMethod = (FeeMethod) document.getNewMaintainableObject().getBusinessObject();
044
045 String frequencyCode = feeMethod.getFeeFrequencyCode();
046 if (StringUtils.isNotEmpty(frequencyCode)) {
047 FrequencyCodeServiceImpl frequencyCodeServiceImpl = (FrequencyCodeServiceImpl) SpringContext.getBean(FrequencyCodeServiceImpl.class);
048 feeMethod.setFeeNextProcessDate(frequencyCodeServiceImpl.calculateProcessDate(frequencyCode));
049 }
050
051 String feeTypeCode = feeMethod.getFeeTypeCode();
052
053 if (EndowConstants.FeeMethod.FEE_TYPE_CODE_VALUE_FOR_PAYMENTS.equalsIgnoreCase(feeTypeCode)) {
054 // rule# 8: If fee type code is "P" then fee base code should be "I"
055 feeMethod.setFeeBaseCode(EndowConstants.FeeMethod.FEE_BASE_CD_VALUE);
056 readOnlyPropertyNames.add(EndowPropertyConstants.FEE_BASE_CD);
057 }
058
059 return readOnlyPropertyNames;
060 }
061
062 /**
063 * @see org.kuali.rice.kns.document.authorization.MaintenanceDocumentPresentationControllerBase#getConditionallyReadOnlyPropertyNames(org.kuali.rice.kns.document.MaintenanceDocument)
064 */
065 @Override
066 public Set<String> getConditionallyReadOnlySectionIds(MaintenanceDocument document) {
067 Set<String> readOnlySectionIds = super.getConditionallyReadOnlySectionIds(document);
068
069 // make all the tabs read only to begin with
070 readOnlySectionIds.add(EndowConstants.FeeMethod.CLASS_CODES_TAB_ID);
071 readOnlySectionIds.add(EndowConstants.FeeMethod.SECURITY_TAB_ID);
072 readOnlySectionIds.add(EndowConstants.FeeMethod.PAYMENT_TYPES_TAB_ID);
073 readOnlySectionIds.add(EndowConstants.FeeMethod.TRANSACTION_TYPES_TAB_ID);
074 readOnlySectionIds.add(EndowConstants.FeeMethod.ENDOWMENT_TRANSACTION_CODES_TAB_ID);
075
076 FeeMethod feeMethod = (FeeMethod) document.getNewMaintainableObject().getBusinessObject();
077 FeeMethod oldFeeMethod = (FeeMethod) document.getOldMaintainableObject().getBusinessObject();
078
079 String documentTypeName = SpringContext.getBean(MaintenanceDocumentDictionaryService.class).getDocumentTypeName(feeMethod.getClass());
080 List<MaintainableSectionDefinition> sectionDefinitions = getMaintenanceDocumentDictionaryService().getMaintainableSections(documentTypeName);
081
082 for (MaintainableSectionDefinition sectionDefinition : sectionDefinitions) {
083 String sectionId = sectionDefinition.getId();
084 if (EndowConstants.FeeMethod.FEE_METHOD_TAB_ID.equalsIgnoreCase(sectionId)) {
085 sectionDefinition.setDefaultOpen(true);
086 }
087 else {
088 sectionDefinition.setDefaultOpen(false);
089 }
090 }
091
092 String feeTypeCode = feeMethod.getFeeTypeCode();
093
094 if (StringUtils.isEmpty(feeTypeCode)) {
095 return readOnlySectionIds;
096 }
097
098 // if Fee Type Code is T then valid tabs are Transaction Type and Endowment Transaction Type
099 // read only the rest of the tabs. Also clear the old collection records
100 // also clear the read only tables collection records as they are no longer valid...
101 if (EndowConstants.FeeMethod.FEE_TYPE_CODE_VALUE_FOR_TRANSACTIONS.equalsIgnoreCase(feeTypeCode)) {
102 readOnlySectionIds.remove(EndowConstants.FeeMethod.TRANSACTION_TYPES_TAB_ID);
103 readOnlySectionIds.remove(EndowConstants.FeeMethod.ENDOWMENT_TRANSACTION_CODES_TAB_ID);
104
105 List<FeeClassCode> feeClassCodes = (List<FeeClassCode>) feeMethod.getFeeClassCodes();
106 feeClassCodes.clear();
107 List<FeeClassCode> oldFeeClassCodes = (List<FeeClassCode>) oldFeeMethod.getFeeClassCodes();
108 oldFeeClassCodes.clear();
109
110
111 List<FeeSecurity> feeSecurity = (List<FeeSecurity>) feeMethod.getFeeSecurity();
112 feeSecurity.clear();
113 List<FeeSecurity> olFeeSecurity = (List<FeeSecurity>) oldFeeMethod.getFeeSecurity();
114 olFeeSecurity.clear();
115
116 List<FeePaymentType> feePaymentTypes = (List<FeePaymentType>) feeMethod.getFeePaymentTypes();
117 feePaymentTypes.clear();
118 List<FeePaymentType> oldFeePaymentTypes = (List<FeePaymentType>) oldFeeMethod.getFeePaymentTypes();
119 oldFeePaymentTypes.clear();
120
121 for (MaintainableSectionDefinition sectionDefinition : sectionDefinitions) {
122 String sectionId = sectionDefinition.getId();
123 if (EndowConstants.FeeMethod.CLASS_CODES_TAB_ID.equalsIgnoreCase(sectionId) ||
124 EndowConstants.FeeMethod.SECURITY_TAB_ID.equalsIgnoreCase(sectionId) ||
125 EndowConstants.FeeMethod.PAYMENT_TYPES_TAB_ID.equalsIgnoreCase(sectionId)) {
126 sectionDefinition.setDefaultOpen(false);
127 }
128 else {
129 sectionDefinition.setDefaultOpen(true);
130 }
131 }
132
133 return readOnlySectionIds;
134 }
135
136 // if Fee Type Code is B then tabs Class Codes and Security are valid. Read only the rest of the tabs...
137 // Clear the old collection records and also clear the read only tables collection records as they are not longer valid...
138 if (EndowConstants.FeeMethod.FEE_TYPE_CODE_VALUE_FOR_BALANCES.equalsIgnoreCase(feeTypeCode)) {
139 readOnlySectionIds.remove(EndowConstants.FeeMethod.CLASS_CODES_TAB_ID);
140 readOnlySectionIds.remove(EndowConstants.FeeMethod.SECURITY_TAB_ID);
141
142 List<FeePaymentType> feePaymentTypes = (List<FeePaymentType>) feeMethod.getFeePaymentTypes();
143 feePaymentTypes.clear();
144 List<FeePaymentType> oldFeePaymentTypes = (List<FeePaymentType>) oldFeeMethod.getFeePaymentTypes();
145 oldFeePaymentTypes.clear();
146
147 List<FeeTransaction> feeTransactions = (List<FeeTransaction>) feeMethod.getFeeTransactions();
148 feeTransactions.clear();
149 List<FeeTransaction> oldFeeTransactions = (List<FeeTransaction>) oldFeeMethod.getFeeTransactions();
150 oldFeeTransactions.clear();
151
152 List<FeeEndowmentTransactionCode> feeEndowmentTransactionCodes = (List<FeeEndowmentTransactionCode>) feeMethod.getFeeEndowmentTransactionCodes();
153 feeEndowmentTransactionCodes.clear();
154 List<FeeEndowmentTransactionCode> oldFeeEndowmentTransactionCodes = (List<FeeEndowmentTransactionCode>) oldFeeMethod.getFeeEndowmentTransactionCodes();
155 oldFeeEndowmentTransactionCodes.clear();
156
157 for (MaintainableSectionDefinition sectionDefinition : sectionDefinitions) {
158 String sectionId = sectionDefinition.getId();
159 if (EndowConstants.FeeMethod.TRANSACTION_TYPES_TAB_ID.equalsIgnoreCase(sectionId) ||
160 EndowConstants.FeeMethod.PAYMENT_TYPES_TAB_ID.equalsIgnoreCase(sectionId) ||
161 EndowConstants.FeeMethod.ENDOWMENT_TRANSACTION_CODES_TAB_ID.equalsIgnoreCase(sectionId)) {
162 sectionDefinition.setDefaultOpen(false);
163 }
164 else {
165 sectionDefinition.setDefaultOpen(true);
166 }
167 }
168
169 return readOnlySectionIds;
170 }
171
172 // if Fee Type Code is P then only Payment Type tab is valid
173 // also clear the read only tables collection records as they are not longer valid...
174 // also clear the old collection records
175 // read only the rest of the tabs...
176 if (EndowConstants.FeeMethod.FEE_TYPE_CODE_VALUE_FOR_PAYMENTS.equalsIgnoreCase(feeTypeCode)) {
177 readOnlySectionIds.remove(EndowConstants.FeeMethod.PAYMENT_TYPES_TAB_ID);
178
179 List<FeeClassCode> feeClassCodes = (List<FeeClassCode>) feeMethod.getFeeClassCodes();
180 feeClassCodes.clear();
181 List<FeeClassCode> oldFeeClassCodes = (List<FeeClassCode>) oldFeeMethod.getFeeClassCodes();
182 oldFeeClassCodes.clear();
183
184 List<FeeSecurity> feeSecurity = (List<FeeSecurity>) feeMethod.getFeeSecurity();
185 feeSecurity.clear();
186 List<FeeSecurity> olFeeSecurity = (List<FeeSecurity>) oldFeeMethod.getFeeSecurity();
187 olFeeSecurity.clear();
188
189 List<FeeTransaction> feeTransactions = (List<FeeTransaction>) feeMethod.getFeeTransactions();
190 feeTransactions.clear();
191 List<FeeTransaction> oldFeeTransactions = (List<FeeTransaction>) oldFeeMethod.getFeeTransactions();
192 oldFeeTransactions.clear();
193
194 List<FeeEndowmentTransactionCode> feeEndowmentTransactionCodes = (List<FeeEndowmentTransactionCode>) feeMethod.getFeeEndowmentTransactionCodes();
195 feeEndowmentTransactionCodes.clear();
196 List<FeeEndowmentTransactionCode> oldFeeEndowmentTransactionCodes = (List<FeeEndowmentTransactionCode>) oldFeeMethod.getFeeEndowmentTransactionCodes();
197 oldFeeEndowmentTransactionCodes.clear();
198
199 for (MaintainableSectionDefinition sectionDefinition : sectionDefinitions) {
200 String sectionId = sectionDefinition.getId();
201 if (EndowConstants.FeeMethod.CLASS_CODES_TAB_ID.equalsIgnoreCase(sectionId) ||
202 EndowConstants.FeeMethod.SECURITY_TAB_ID.equalsIgnoreCase(sectionId) ||
203 EndowConstants.FeeMethod.TRANSACTION_TYPES_TAB_ID.equalsIgnoreCase(sectionId) ||
204 EndowConstants.FeeMethod.ENDOWMENT_TRANSACTION_CODES_TAB_ID.equalsIgnoreCase(sectionId)) {
205 sectionDefinition.setDefaultOpen(false);
206 }
207 else {
208 sectionDefinition.setDefaultOpen(true);
209 }
210 }
211
212 return readOnlySectionIds;
213 }
214
215 return readOnlySectionIds;
216 }
217 }