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 }