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.pdp.businessobject; 017 018 import java.util.LinkedHashMap; 019 020 import org.kuali.kfs.pdp.PdpPropertyConstants; 021 import org.kuali.kfs.sys.context.SpringContext; 022 import org.kuali.rice.kns.bo.Inactivateable; 023 import org.kuali.rice.kns.bo.PersistableBusinessObjectBase; 024 import org.kuali.rice.kns.bo.PostalCode; 025 import org.kuali.rice.kns.bo.State; 026 import org.kuali.rice.kns.service.PostalCodeService; 027 import org.kuali.rice.kns.service.StateService; 028 029 public class ACHBank extends PersistableBusinessObjectBase implements Inactivateable { 030 031 private String bankRoutingNumber; 032 private String bankOfficeCode; 033 private String bankServiceNumber; 034 private String bankTypeCode; 035 private String bankNewRoutingNumber; 036 private String bankName; 037 private String bankStreetAddress; 038 private String bankCityName; 039 private String bankStateCode; 040 private String bankZipCode; 041 private String bankPhoneAreaCode; 042 private String bankPhonePrefixNumber; 043 private String bankPhoneSuffixNumber; 044 private String bankInstitutionStatusCode; 045 private String bankDataViewCode; 046 private boolean active; 047 048 private State bankState; 049 private PostalCode postalCode; 050 051 /** 052 * Default constructor. 053 */ 054 public ACHBank() { 055 056 } 057 058 /** 059 * This constructor takes a line of data from https://www.fededirectory.frb.org/FedACHdir.txt and populates the object 060 * 061 * @param fileData 062 */ 063 public ACHBank(String fileData) { 064 // 074914274O0710003011020207000000000UNITED COMMERCE BANK 211 SOUTH COLLEGE AVENUE BLOOMINGTON IN474040000812336226511 065 // Routing Number 9 1-9 The institution's routing number 066 // Office Code 1 10 Main office or branch O=main B=branch 067 // Servicing FRB Number 9 11-19 Servicing Fed's main office routing number 068 // Record Type Code 1 20 The code indicating the ABA number to be used to route or send ACH items to the RFI 069 // 0 = Institution is a Federal Reserve Bank 070 // 1 = Send items to customer routing number 071 // 2 = Send items to customer using new routing number field 072 // Change Date 6 21-26 Date of last change to CRF information (MMDDYY) 073 // New Routing Number 9 27-35 Institution's new routing number resulting from a merger or renumber 074 // Customer Name 36 36-71 Commonly used abbreviated name 075 // Address 36 72-107 Delivery address 076 // City 20 108-127 City name in the delivery address 077 // State Code 2 128-129 State code of the state in the delivery address 078 // Zipcode 5 130-134 Zip code in the delivery address 079 // Zipcode Extension 4 135-138 Zip code extension in the delivery address 080 // Telephone Area Code 3 139-141 Area code of the CRF contact telephone number 081 // Telephone Prefix Number 3 142-144 Prefix of the CRF contact telephone number 082 // Telephone Suffix Number 4 145-148 Suffix of the CRF contact telephone number 083 // Institution Status Code 1 149 Code is based on the customers receiver code 084 // 1=Receives Gov/Comm 085 // Data View Code 1 150 1=Current view 086 // Filler 5 151-155 Spaces 087 088 setBankRoutingNumber(getField(fileData, 1, 9)); 089 setBankOfficeCode(getField(fileData, 10, 1)); 090 setBankServiceNumber(getField(fileData, 11, 9)); 091 setBankTypeCode(getField(fileData, 20, 1)); 092 setBankNewRoutingNumber(getField(fileData, 27, 9)); 093 setBankName(getField(fileData, 36, 36)); 094 setBankStreetAddress(getField(fileData, 72, 36)); 095 setBankCityName(getField(fileData, 108, 20)); 096 setBankStateCode(getField(fileData, 128, 2)); 097 setBankZipCode(getField(fileData, 130, 5)); 098 setBankPhoneAreaCode(getField(fileData, 139, 3)); 099 setBankPhonePrefixNumber(getField(fileData, 142, 3)); 100 setBankPhoneSuffixNumber(getField(fileData, 145, 4)); 101 setBankInstitutionStatusCode(getField(fileData, 149, 1)); 102 setBankDataViewCode(getField(fileData, 150, 1)); 103 setActive(true); 104 } 105 106 private String getField(String data, int startChar, int length) { 107 return data.substring(startChar - 1, startChar + length - 1).trim(); 108 } 109 110 /** 111 * Gets the bankRoutingNumber attribute. 112 * 113 * @return Returns the bankRoutingNumber 114 */ 115 public String getBankRoutingNumber() { 116 return bankRoutingNumber; 117 } 118 119 /** 120 * Sets the bankRoutingNumber attribute. 121 * 122 * @param bankRoutingNumber The bankRoutingNumber to set. 123 */ 124 public void setBankRoutingNumber(String bankRoutingNumber) { 125 this.bankRoutingNumber = bankRoutingNumber; 126 } 127 128 129 /** 130 * Gets the bankOfficeCode attribute. 131 * 132 * @return Returns the bankOfficeCode 133 */ 134 public String getBankOfficeCode() { 135 return bankOfficeCode; 136 } 137 138 /** 139 * Sets the bankOfficeCode attribute. 140 * 141 * @param bankOfficeCode The bankOfficeCode to set. 142 */ 143 public void setBankOfficeCode(String bankOfficeCode) { 144 this.bankOfficeCode = bankOfficeCode; 145 } 146 147 148 /** 149 * Gets the bankServiceNumber attribute. 150 * 151 * @return Returns the bankServiceNumber 152 */ 153 public String getBankServiceNumber() { 154 return bankServiceNumber; 155 } 156 157 /** 158 * Sets the bankServiceNumber attribute. 159 * 160 * @param bankServiceNumber The bankServiceNumber to set. 161 */ 162 public void setBankServiceNumber(String bankServiceNumber) { 163 this.bankServiceNumber = bankServiceNumber; 164 } 165 166 167 /** 168 * Gets the bankTypeCode attribute. 169 * 170 * @return Returns the bankTypeCode 171 */ 172 public String getBankTypeCode() { 173 return bankTypeCode; 174 } 175 176 /** 177 * Sets the bankTypeCode attribute. 178 * 179 * @param bankTypeCode The bankTypeCode to set. 180 */ 181 public void setBankTypeCode(String bankTypeCode) { 182 this.bankTypeCode = bankTypeCode; 183 } 184 185 186 /** 187 * Gets the bankNewRoutingNumber attribute. 188 * 189 * @return Returns the bankNewRoutingNumber 190 */ 191 public String getBankNewRoutingNumber() { 192 return bankNewRoutingNumber; 193 } 194 195 /** 196 * Sets the bankNewRoutingNumber attribute. 197 * 198 * @param bankNewRoutingNumber The bankNewRoutingNumber to set. 199 */ 200 public void setBankNewRoutingNumber(String bankNewRoutingNumber) { 201 this.bankNewRoutingNumber = bankNewRoutingNumber; 202 } 203 204 205 /** 206 * Gets the bankName attribute. 207 * 208 * @return Returns the bankName 209 */ 210 public String getBankName() { 211 return bankName; 212 } 213 214 /** 215 * Sets the bankName attribute. 216 * 217 * @param bankName The bankName to set. 218 */ 219 public void setBankName(String bankName) { 220 this.bankName = bankName; 221 } 222 223 224 /** 225 * Gets the bankStreetAddress attribute. 226 * 227 * @return Returns the bankStreetAddress 228 */ 229 public String getBankStreetAddress() { 230 return bankStreetAddress; 231 } 232 233 /** 234 * Sets the bankStreetAddress attribute. 235 * 236 * @param bankStreetAddress The bankStreetAddress to set. 237 */ 238 public void setBankStreetAddress(String bankStreetAddress) { 239 this.bankStreetAddress = bankStreetAddress; 240 } 241 242 243 /** 244 * Gets the bankCityName attribute. 245 * 246 * @return Returns the bankCityName 247 */ 248 public String getBankCityName() { 249 return bankCityName; 250 } 251 252 /** 253 * Sets the bankCityName attribute. 254 * 255 * @param bankCityName The bankCityName to set. 256 */ 257 public void setBankCityName(String bankCityName) { 258 this.bankCityName = bankCityName; 259 } 260 261 262 /** 263 * Gets the bankStateCode attribute. 264 * 265 * @return Returns the bankStateCode 266 */ 267 public String getBankStateCode() { 268 return bankStateCode; 269 } 270 271 /** 272 * Sets the bankStateCode attribute. 273 * 274 * @param bankStateCode The bankStateCode to set. 275 */ 276 public void setBankStateCode(String bankStateCode) { 277 this.bankStateCode = bankStateCode; 278 } 279 280 281 /** 282 * Gets the bankZipCode attribute. 283 * 284 * @return Returns the bankZipCode 285 */ 286 public String getBankZipCode() { 287 return bankZipCode; 288 } 289 290 /** 291 * Sets the bankZipCode attribute. 292 * 293 * @param bankZipCode The bankZipCode to set. 294 */ 295 public void setBankZipCode(String bankZipCode) { 296 this.bankZipCode = bankZipCode; 297 } 298 299 /** 300 * Gets the bankPhoneAreaCode attribute. 301 * 302 * @return Returns the bankPhoneAreaCode 303 */ 304 public String getBankPhoneAreaCode() { 305 return bankPhoneAreaCode; 306 } 307 308 /** 309 * Sets the bankPhoneAreaCode attribute. 310 * 311 * @param bankPhoneAreaCode The bankPhoneAreaCode to set. 312 */ 313 public void setBankPhoneAreaCode(String bankPhoneAreaCode) { 314 this.bankPhoneAreaCode = bankPhoneAreaCode; 315 } 316 317 318 /** 319 * Gets the bankPhonePrefixNumber attribute. 320 * 321 * @return Returns the bankPhonePrefixNumber 322 */ 323 public String getBankPhonePrefixNumber() { 324 return bankPhonePrefixNumber; 325 } 326 327 /** 328 * Sets the bankPhonePrefixNumber attribute. 329 * 330 * @param bankPhonePrefixNumber The bankPhonePrefixNumber to set. 331 */ 332 public void setBankPhonePrefixNumber(String bankPhonePrefixNumber) { 333 this.bankPhonePrefixNumber = bankPhonePrefixNumber; 334 } 335 336 337 /** 338 * Gets the bankPhoneSuffixNumber attribute. 339 * 340 * @return Returns the bankPhoneSuffixNumber 341 */ 342 public String getBankPhoneSuffixNumber() { 343 return bankPhoneSuffixNumber; 344 } 345 346 /** 347 * Sets the bankPhoneSuffixNumber attribute. 348 * 349 * @param bankPhoneSuffixNumber The bankPhoneSuffixNumber to set. 350 */ 351 public void setBankPhoneSuffixNumber(String bankPhoneSuffixNumber) { 352 this.bankPhoneSuffixNumber = bankPhoneSuffixNumber; 353 } 354 355 356 /** 357 * Gets the bankInstitutionStatusCode attribute. 358 * 359 * @return Returns the bankInstitutionStatusCode 360 */ 361 public String getBankInstitutionStatusCode() { 362 return bankInstitutionStatusCode; 363 } 364 365 /** 366 * Sets the bankInstitutionStatusCode attribute. 367 * 368 * @param bankInstitutionStatusCode The bankInstitutionStatusCode to set. 369 */ 370 public void setBankInstitutionStatusCode(String bankInstitutionStatusCode) { 371 this.bankInstitutionStatusCode = bankInstitutionStatusCode; 372 } 373 374 375 /** 376 * Gets the bankDataViewCode attribute. 377 * 378 * @return Returns the bankDataViewCode 379 */ 380 public String getBankDataViewCode() { 381 return bankDataViewCode; 382 } 383 384 /** 385 * Sets the bankDataViewCode attribute. 386 * 387 * @param bankDataViewCode The bankDataViewCode to set. 388 */ 389 public void setBankDataViewCode(String bankDataViewCode) { 390 this.bankDataViewCode = bankDataViewCode; 391 } 392 393 /** 394 * Gets the bankState attribute. 395 * 396 * @return Returns the bankState. 397 */ 398 public State getBankState() { 399 bankState = SpringContext.getBean(StateService.class).getByPrimaryIdIfNecessary(bankStateCode, bankState); 400 return bankState; 401 } 402 403 /** 404 * Gets the postalCode attribute. 405 * 406 * @return Returns the postalCode. 407 */ 408 public PostalCode getPostalCode() { 409 postalCode = SpringContext.getBean(PostalCodeService.class).getByPostalCodeInDefaultCountryIfNecessary(bankZipCode, postalCode); 410 return postalCode; 411 } 412 413 /** 414 * 415 * @see org.kuali.rice.kns.bo.Inactivateable#isActive() 416 */ 417 public boolean isActive() { 418 return active; 419 } 420 421 /** 422 * 423 * @see org.kuali.rice.kns.bo.Inactivateable#setActive(boolean) 424 */ 425 public void setActive(boolean active) { 426 this.active = active; 427 } 428 429 /** 430 * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper() 431 */ 432 protected LinkedHashMap toStringMapper() { 433 LinkedHashMap m = new LinkedHashMap(); 434 m.put(PdpPropertyConstants.BANK_ROUTING_NUMBER, this.bankRoutingNumber); 435 return m; 436 } 437 438 }