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.service.impl; 017 018 import java.util.HashMap; 019 import java.util.List; 020 import java.util.Map; 021 022 import org.apache.commons.lang.StringUtils; 023 import org.kuali.kfs.module.endow.EndowConstants; 024 import org.kuali.kfs.module.endow.businessobject.ClassCode; 025 import org.kuali.kfs.module.endow.businessobject.EndowmentTransactionCode; 026 import org.kuali.kfs.module.endow.businessobject.GLLink; 027 import org.kuali.kfs.module.endow.businessobject.KEMID; 028 import org.kuali.kfs.module.endow.businessobject.KemidGeneralLedgerAccount; 029 import org.kuali.kfs.module.endow.businessobject.Security; 030 import org.kuali.kfs.module.endow.businessobject.SecurityValuationMethod; 031 import org.kuali.kfs.module.endow.document.service.ClassCodeService; 032 import org.kuali.kfs.module.endow.document.service.EndowmentTransactionCodeService; 033 import org.kuali.kfs.module.endow.document.service.EndowmentTransactionDocumentService; 034 import org.kuali.kfs.module.endow.document.service.KEMIDService; 035 import org.kuali.kfs.module.endow.document.service.SecurityService; 036 import org.kuali.kfs.module.endow.document.service.SecurityValuationMethodService; 037 import org.kuali.kfs.sys.context.SpringContext; 038 import org.kuali.rice.kns.service.BusinessObjectService; 039 040 /** 041 * This class is the service implementation for the EndowmentTransactionCodeService. This is the default, Kuali provided implementation. 042 */ 043 public class EndowmentTransactionDocumentServiceImpl implements EndowmentTransactionDocumentService 044 { 045 private BusinessObjectService businessObjectService; 046 private KEMIDService kemidService; 047 private EndowmentTransactionCodeService endowmentTransactionCodeService; 048 049 public String[] getSecurity(String securityID) 050 { 051 Security security = SpringContext.getBean(SecurityService.class).getByPrimaryKey(securityID); 052 if(null == security) 053 return null; 054 055 ClassCode classCode = SpringContext.getBean(ClassCodeService.class).getByPrimaryKey(security.getSecurityClassCode()); 056 if(null == classCode) 057 return null; 058 security.setClassCode(classCode); 059 060 EndowmentTransactionCode tranCode = SpringContext.getBean(EndowmentTransactionCodeService.class).getByPrimaryKey(classCode.getSecurityEndowmentTransactionCode()); 061 if(null == tranCode) 062 return null; 063 064 String returnArray[] = new String[5]; 065 returnArray[0] = security.getDescription(); 066 returnArray[1] = security.getSecurityClassCode() + " - " + classCode.getName(); 067 returnArray[2] = tranCode.getCode() + " - " + classCode.getName(); 068 returnArray[3] = new Boolean( security.getClassCode().isTaxLotIndicator()).toString(); 069 returnArray[4] = security.getId(); 070 071 072 return returnArray; 073 } 074 075 /** 076 * Gets the security, class and valuationMethod details based on the securityId. 077 * @see org.kuali.kfs.module.endow.document.service.EndowmentTransactionDocumentService#getSecurity(java.lang.String) 078 */ 079 public String[] getSecurityForHoldingHistoryValueAdjustment(String securityId) { 080 Security security = SpringContext.getBean(SecurityService.class).getByPrimaryKey(securityId); 081 if(null == security) 082 return null; 083 084 ClassCode classCode = SpringContext.getBean(ClassCodeService.class).getByPrimaryKey(security.getSecurityClassCode()); 085 if(null == classCode) 086 return null; 087 088 SecurityValuationMethod securityValuation = SpringContext.getBean(SecurityValuationMethodService.class).getByPrimaryKey(classCode.getValuationMethod()); 089 090 if(null == securityValuation) 091 return null; 092 093 classCode.setSecurityValuationMethod(securityValuation); 094 security.setClassCode(classCode); 095 096 String returnArray[] = new String[4]; 097 returnArray[0] = security.getDescription(); 098 returnArray[1] = classCode.getCodeAndDescription(); 099 returnArray[2] = securityValuation.getCodeAndDescription(); 100 returnArray[3] = security.getId(); 101 102 return returnArray; 103 } 104 105 /** 106 * @see org.kuali.kfs.module.endow.document.service.EndowmentTransactionDocumentService#matchChartBetweenKEMIDAndETranCode(java.lang.String, java.lang.String, java.lang.String) 107 * 108 * Check if the chart code matches based on the following rule: 109 * The ETRAN Code used must have an appropriately identified general ledger object code record; 110 * one that matches the Chart for the KEMID associated general ledger account. 111 * - If the END_TRAN_LN_T: TRAN_IP_IND_CD is equal to I, the chart must match the chart of the active END_KEMID_GL_LNK_T record where the IP_IND_CD is equal to I. 112 * - If the END_TRAN_LN_T: TRAN_IP_IND_CD is equal to P, the chart must match the chart of the active END_KEMID_GL_LNK_T record where the IP_IND_CD is equal to P. 113 * Assume that all inputs are valid. 114 */ 115 public boolean matchChartBetweenKEMIDAndETranCode(String kemid, String etranCode, String ipIndicator){ 116 boolean matchChartIndicator = false; 117 List<KemidGeneralLedgerAccount> kemidGeneralLedgerAccounts = null; 118 List<GLLink> glLinks = null; 119 String theChartCode = null; 120 121 //Get the chart code, it can't be null because each KEMID always have one active income KemidGeneralLedgerAccount. 122 //Each KEMID always have one active principal KemidGeneralLedgerAccount if type code --> principal restriction code is not NA 123 //This will be valid before checking if the chart codes match. 124 kemidGeneralLedgerAccounts = kemidService.getByPrimaryKey(kemid).getKemidGeneralLedgerAccounts(); 125 String theIpIndicator = null; 126 boolean activeIndicatorForKemidGLAccount = false; 127 128 for (KemidGeneralLedgerAccount kemidGeneralLedgerAccount:kemidGeneralLedgerAccounts){ 129 theIpIndicator = kemidGeneralLedgerAccount.getIncomePrincipalIndicatorCode(); 130 activeIndicatorForKemidGLAccount = kemidGeneralLedgerAccount.isActive(); 131 if (theIpIndicator.equalsIgnoreCase(ipIndicator) && activeIndicatorForKemidGLAccount ){ 132 theChartCode = kemidGeneralLedgerAccount.getChartCode(); 133 break; 134 } 135 } 136 glLinks = endowmentTransactionCodeService.getByPrimaryKey(etranCode).getGlLinks(); 137 if (theChartCode != null){ 138 for (GLLink glLink:glLinks){ 139 if (glLink.getChartCode().equalsIgnoreCase(theChartCode) && glLink.isActive()){ 140 matchChartIndicator = true; 141 break; 142 } 143 } 144 } 145 return matchChartIndicator; 146 } 147 148 /** 149 * @see org.kuali.kfs.module.endow.document.service.EndowmentTransactionDocumentService#matchChartBetweenKEMIDAndETranCode(java.lang.String, java.lang.String, java.lang.String) 150 * 151 * Check if the chart code matches based on the following rule: 152 * The Securities ETRAN Code used must have an appropriately identified general ledger object code record; 153 * one that matches the Chart for the KEMID associated general ledger account. 154 * - If the END_TRAN_LN_T: TRAN_IP_IND_CD is equal to I, the chart must match the chart of the active END_KEMID_GL_LNK_T record where the IP_IND_CD is equal to I. 155 * - If the END_TRAN_LN_T: TRAN_IP_IND_CD is equal to P, the chart must match the chart of the active END_KEMID_GL_LNK_T record where the IP_IND_CD is equal to P. 156 * Assume that all inputs are valid. 157 */ 158 public boolean matchChartBetweenSecurityAndETranCode(Security security, String kemid, String ipIndicator){ 159 boolean matchChartIndicator = false; 160 List<KemidGeneralLedgerAccount> kemidGeneralLedgerAccounts = null; 161 List<GLLink> glLinks = null; 162 String theChartCode = null; 163 164 //Get the chart code, it can't be null because each KEMID always have one active income KemidGeneralLedgerAccount. 165 //Each KEMID always have one active principal KemidGeneralLedgerAccount if type code --> principal restriction code is not NA 166 //This will be valid before checking if the chart codes match. 167 kemidGeneralLedgerAccounts = kemidService.getByPrimaryKey(kemid).getKemidGeneralLedgerAccounts(); 168 String theIpIndicator = null; 169 boolean activeIndicatorForKemidGLAccount = false; 170 171 for (KemidGeneralLedgerAccount kemidGeneralLedgerAccount:kemidGeneralLedgerAccounts){ 172 theIpIndicator = kemidGeneralLedgerAccount.getIncomePrincipalIndicatorCode(); 173 activeIndicatorForKemidGLAccount = kemidGeneralLedgerAccount.isActive(); 174 if (theIpIndicator.equalsIgnoreCase(ipIndicator) && activeIndicatorForKemidGLAccount ){ 175 theChartCode = kemidGeneralLedgerAccount.getChartCode(); 176 break; 177 } 178 } 179 180 //Obtain Etran code from security 181 security.refreshNonUpdateableReferences(); 182 //Obtain Security GL Links 183 glLinks = endowmentTransactionCodeService.getByPrimaryKey(security.getClassCode().getSecurityEndowmentTransactionCode()).getGlLinks(); 184 185 if (theChartCode != null){ 186 for (GLLink glLink:glLinks){ 187 if (glLink.getChartCode().equalsIgnoreCase(theChartCode) && glLink.isActive()){ 188 matchChartIndicator = true; 189 break; 190 } 191 } 192 } 193 return matchChartIndicator; 194 } 195 /** 196 * Gets the businessObjectService. 197 * 198 * @return businessObjectService 199 */ 200 public BusinessObjectService getBusinessObjectService() { 201 return businessObjectService; 202 } 203 204 /** 205 * Sets the businessObjectService 206 * 207 * @param businessObjectService 208 */ 209 public void setBusinessObjectService(BusinessObjectService businessObjectService) { 210 this.businessObjectService = businessObjectService; 211 } 212 213 /** 214 * Gets the kemidService. 215 * 216 * @return kemidService 217 */ 218 public KEMIDService getKemidService(){ 219 return kemidService; 220 } 221 222 /** 223 * Sets the kemidService. 224 * 225 * @param kemidService 226 */ 227 public void setKemidService (KEMIDService kemidService){ 228 this.kemidService = kemidService; 229 } 230 231 /** 232 * Gets the endowmentTransactionCodeService. 233 * 234 * @return endowmentTransactionCodeService 235 */ 236 public EndowmentTransactionCodeService getEndowmentTransactionCodeService(){ 237 return endowmentTransactionCodeService; 238 } 239 240 /** 241 * Sets the endowmentTransactionCodeService. 242 * 243 * @param endowmentTransactionCodeService 244 */ 245 public void setEndowmentTransactionCodeService (EndowmentTransactionCodeService endowmentTransactionCodeService){ 246 this.endowmentTransactionCodeService = endowmentTransactionCodeService; 247 } 248 249 }