/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.pdp.businessobject;
import java.util.HashMap;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.rice.core.api.mo.common.active.MutableInactivatable;
import org.kuali.rice.krad.bo.PersistableBusinessObjectBase;
import org.kuali.rice.krad.service.KualiModuleService;
import org.kuali.rice.krad.service.ModuleService;
import org.kuali.rice.location.api.LocationConstants;
import org.kuali.rice.location.framework.postalcode.PostalCodeEbo;
import org.kuali.rice.location.framework.state.StateEbo;
public class ACHBank extends PersistableBusinessObjectBase implements MutableInactivatable {
protected String bankRoutingNumber;
protected String bankOfficeCode;
protected String bankServiceNumber;
protected String bankTypeCode;
protected String bankNewRoutingNumber;
protected String bankName;
protected String bankStreetAddress;
protected String bankCityName;
protected String bankStateCode;
protected String bankZipCode;
protected String bankPhoneAreaCode;
protected String bankPhonePrefixNumber;
protected String bankPhoneSuffixNumber;
protected String bankInstitutionStatusCode;
protected String bankDataViewCode;
protected boolean active;
protected StateEbo bankState;
protected PostalCodeEbo postalCode;
/**
* Default constructor.
*/
public ACHBank() {
}
/**
* This constructor takes a line of data from https://www.fededirectory.frb.org/FedACHdir.txt and populates the object
*
* @param fileData
*/
public ACHBank(String fileData) {
// 074914274O0710003011020207000000000UNITED COMMERCE BANK 211 SOUTH COLLEGE AVENUE BLOOMINGTON IN474040000812336226511
// Routing Number 9 1-9 The institution's routing number
// Office Code 1 10 Main office or branch O=main B=branch
// Servicing FRB Number 9 11-19 Servicing Fed's main office routing number
// Record Type Code 1 20 The code indicating the ABA number to be used to route or send ACH items to the RFI
// 0 = Institution is a Federal Reserve Bank
// 1 = Send items to customer routing number
// 2 = Send items to customer using new routing number field
// Change Date 6 21-26 Date of last change to CRF information (MMDDYY)
// New Routing Number 9 27-35 Institution's new routing number resulting from a merger or renumber
// Customer Name 36 36-71 Commonly used abbreviated name
// Address 36 72-107 Delivery address
// City 20 108-127 City name in the delivery address
// State Code 2 128-129 State code of the state in the delivery address
// Zipcode 5 130-134 Zip code in the delivery address
// Zipcode Extension 4 135-138 Zip code extension in the delivery address
// Telephone Area Code 3 139-141 Area code of the CRF contact telephone number
// Telephone Prefix Number 3 142-144 Prefix of the CRF contact telephone number
// Telephone Suffix Number 4 145-148 Suffix of the CRF contact telephone number
// Institution Status Code 1 149 Code is based on the customers receiver code
// 1=Receives Gov/Comm
// Data View Code 1 150 1=Current view
// Filler 5 151-155 Spaces
setBankRoutingNumber(getField(fileData, 1, 9));
setBankOfficeCode(getField(fileData, 10, 1));
setBankServiceNumber(getField(fileData, 11, 9));
setBankTypeCode(getField(fileData, 20, 1));
setBankNewRoutingNumber(getField(fileData, 27, 9));
setBankName(getField(fileData, 36, 36));
setBankStreetAddress(getField(fileData, 72, 36));
setBankCityName(getField(fileData, 108, 20));
setBankStateCode(getField(fileData, 128, 2));
setBankZipCode(getField(fileData, 130, 5));
setBankPhoneAreaCode(getField(fileData, 139, 3));
setBankPhonePrefixNumber(getField(fileData, 142, 3));
setBankPhoneSuffixNumber(getField(fileData, 145, 4));
setBankInstitutionStatusCode(getField(fileData, 149, 1));
setBankDataViewCode(getField(fileData, 150, 1));
setActive(true);
}
protected String getField(String data, int startChar, int length) {
return data.substring(startChar - 1, startChar + length - 1).trim();
}
/**
* Gets the bankRoutingNumber attribute.
*
* @return Returns the bankRoutingNumber
*/
public String getBankRoutingNumber() {
return bankRoutingNumber;
}
/**
* Sets the bankRoutingNumber attribute.
*
* @param bankRoutingNumber The bankRoutingNumber to set.
*/
public void setBankRoutingNumber(String bankRoutingNumber) {
this.bankRoutingNumber = bankRoutingNumber;
}
/**
* Gets the bankOfficeCode attribute.
*
* @return Returns the bankOfficeCode
*/
public String getBankOfficeCode() {
return bankOfficeCode;
}
/**
* Sets the bankOfficeCode attribute.
*
* @param bankOfficeCode The bankOfficeCode to set.
*/
public void setBankOfficeCode(String bankOfficeCode) {
this.bankOfficeCode = bankOfficeCode;
}
/**
* Gets the bankServiceNumber attribute.
*
* @return Returns the bankServiceNumber
*/
public String getBankServiceNumber() {
return bankServiceNumber;
}
/**
* Sets the bankServiceNumber attribute.
*
* @param bankServiceNumber The bankServiceNumber to set.
*/
public void setBankServiceNumber(String bankServiceNumber) {
this.bankServiceNumber = bankServiceNumber;
}
/**
* Gets the bankTypeCode attribute.
*
* @return Returns the bankTypeCode
*/
public String getBankTypeCode() {
return bankTypeCode;
}
/**
* Sets the bankTypeCode attribute.
*
* @param bankTypeCode The bankTypeCode to set.
*/
public void setBankTypeCode(String bankTypeCode) {
this.bankTypeCode = bankTypeCode;
}
/**
* Gets the bankNewRoutingNumber attribute.
*
* @return Returns the bankNewRoutingNumber
*/
public String getBankNewRoutingNumber() {
return bankNewRoutingNumber;
}
/**
* Sets the bankNewRoutingNumber attribute.
*
* @param bankNewRoutingNumber The bankNewRoutingNumber to set.
*/
public void setBankNewRoutingNumber(String bankNewRoutingNumber) {
this.bankNewRoutingNumber = bankNewRoutingNumber;
}
/**
* Gets the bankName attribute.
*
* @return Returns the bankName
*/
public String getBankName() {
return bankName;
}
/**
* Sets the bankName attribute.
*
* @param bankName The bankName to set.
*/
public void setBankName(String bankName) {
this.bankName = bankName;
}
/**
* Gets the bankStreetAddress attribute.
*
* @return Returns the bankStreetAddress
*/
public String getBankStreetAddress() {
return bankStreetAddress;
}
/**
* Sets the bankStreetAddress attribute.
*
* @param bankStreetAddress The bankStreetAddress to set.
*/
public void setBankStreetAddress(String bankStreetAddress) {
this.bankStreetAddress = bankStreetAddress;
}
/**
* Gets the bankCityName attribute.
*
* @return Returns the bankCityName
*/
public String getBankCityName() {
return bankCityName;
}
/**
* Sets the bankCityName attribute.
*
* @param bankCityName The bankCityName to set.
*/
public void setBankCityName(String bankCityName) {
this.bankCityName = bankCityName;
}
/**
* Gets the bankStateCode attribute.
*
* @return Returns the bankStateCode
*/
public String getBankStateCode() {
return bankStateCode;
}
/**
* Sets the bankStateCode attribute.
*
* @param bankStateCode The bankStateCode to set.
*/
public void setBankStateCode(String bankStateCode) {
this.bankStateCode = bankStateCode;
}
/**
* Gets the bankZipCode attribute.
*
* @return Returns the bankZipCode
*/
public String getBankZipCode() {
return bankZipCode;
}
/**
* Sets the bankZipCode attribute.
*
* @param bankZipCode The bankZipCode to set.
*/
public void setBankZipCode(String bankZipCode) {
this.bankZipCode = bankZipCode;
}
/**
* Gets the bankPhoneAreaCode attribute.
*
* @return Returns the bankPhoneAreaCode
*/
public String getBankPhoneAreaCode() {
return bankPhoneAreaCode;
}
/**
* Sets the bankPhoneAreaCode attribute.
*
* @param bankPhoneAreaCode The bankPhoneAreaCode to set.
*/
public void setBankPhoneAreaCode(String bankPhoneAreaCode) {
this.bankPhoneAreaCode = bankPhoneAreaCode;
}
/**
* Gets the bankPhonePrefixNumber attribute.
*
* @return Returns the bankPhonePrefixNumber
*/
public String getBankPhonePrefixNumber() {
return bankPhonePrefixNumber;
}
/**
* Sets the bankPhonePrefixNumber attribute.
*
* @param bankPhonePrefixNumber The bankPhonePrefixNumber to set.
*/
public void setBankPhonePrefixNumber(String bankPhonePrefixNumber) {
this.bankPhonePrefixNumber = bankPhonePrefixNumber;
}
/**
* Gets the bankPhoneSuffixNumber attribute.
*
* @return Returns the bankPhoneSuffixNumber
*/
public String getBankPhoneSuffixNumber() {
return bankPhoneSuffixNumber;
}
/**
* Sets the bankPhoneSuffixNumber attribute.
*
* @param bankPhoneSuffixNumber The bankPhoneSuffixNumber to set.
*/
public void setBankPhoneSuffixNumber(String bankPhoneSuffixNumber) {
this.bankPhoneSuffixNumber = bankPhoneSuffixNumber;
}
/**
* Gets the bankInstitutionStatusCode attribute.
*
* @return Returns the bankInstitutionStatusCode
*/
public String getBankInstitutionStatusCode() {
return bankInstitutionStatusCode;
}
/**
* Sets the bankInstitutionStatusCode attribute.
*
* @param bankInstitutionStatusCode The bankInstitutionStatusCode to set.
*/
public void setBankInstitutionStatusCode(String bankInstitutionStatusCode) {
this.bankInstitutionStatusCode = bankInstitutionStatusCode;
}
/**
* Gets the bankDataViewCode attribute.
*
* @return Returns the bankDataViewCode
*/
public String getBankDataViewCode() {
return bankDataViewCode;
}
/**
* Sets the bankDataViewCode attribute.
*
* @param bankDataViewCode The bankDataViewCode to set.
*/
public void setBankDataViewCode(String bankDataViewCode) {
this.bankDataViewCode = bankDataViewCode;
}
/**
* Gets the bankState attribute.
*
* @return Returns the bankState.
*/
public StateEbo getBankState() {
if ( StringUtils.isBlank(bankStateCode) || StringUtils.isBlank(KFSConstants.COUNTRY_CODE_UNITED_STATES ) ) {
bankState = null;
} else {
if ( bankState == null || !StringUtils.equals( bankState.getCode(),bankStateCode) || !StringUtils.equals(bankState.getCountryCode(), KFSConstants.COUNTRY_CODE_UNITED_STATES ) ) {
ModuleService moduleService = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(StateEbo.class);
if ( moduleService != null ) {
Map<String,Object> keys = new HashMap<String, Object>(2);
keys.put(LocationConstants.PrimaryKeyConstants.COUNTRY_CODE, KFSConstants.COUNTRY_CODE_UNITED_STATES);/*RICE20_REFACTORME*/
keys.put(LocationConstants.PrimaryKeyConstants.CODE, bankStateCode);
bankState = moduleService.getExternalizableBusinessObject(StateEbo.class, keys);
} else {
throw new RuntimeException( "CONFIGURATION ERROR: No responsible module found for EBO class. Unable to proceed." );
}
}
}
return bankState;
}
/**
* Gets the postalCode attribute.
*
* @return Returns the postalCode.
*/
public PostalCodeEbo getPostalCode() {
if ( StringUtils.isBlank(bankZipCode) || StringUtils.isBlank(KFSConstants.COUNTRY_CODE_UNITED_STATES ) ) {
postalCode = null;
} else {
if ( postalCode == null || !StringUtils.equals( postalCode.getCode(),bankZipCode) || !StringUtils.equals(postalCode.getCountryCode(), KFSConstants.COUNTRY_CODE_UNITED_STATES ) ) {
ModuleService moduleService = SpringContext.getBean(KualiModuleService.class).getResponsibleModuleService(PostalCodeEbo.class);
if ( moduleService != null ) {
Map<String,Object> keys = new HashMap<String, Object>(2);
keys.put(LocationConstants.PrimaryKeyConstants.COUNTRY_CODE, KFSConstants.COUNTRY_CODE_UNITED_STATES);/*RICE20_REFACTORME*/
keys.put(LocationConstants.PrimaryKeyConstants.CODE, bankZipCode);
postalCode = moduleService.getExternalizableBusinessObject(PostalCodeEbo.class, keys);
} else {
throw new RuntimeException( "CONFIGURATION ERROR: No responsible module found for EBO class. Unable to proceed." );
}
}
}
return postalCode;
}
/**
*
* @see org.kuali.rice.core.api.mo.common.active.MutableInactivatable#isActive()
*/
@Override
public boolean isActive() {
return active;
}
/**
*
* @see org.kuali.rice.core.api.mo.common.active.MutableInactivatable#setActive(boolean)
*/
@Override
public void setActive(boolean active) {
this.active = active;
}
}