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    }