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.sys.businessobject;
017    
018    import java.sql.Date;
019    import java.util.LinkedHashMap;
020    import java.util.List;
021    
022    import org.kuali.kfs.coa.businessobject.Account;
023    import org.kuali.kfs.coa.businessobject.Chart;
024    import org.kuali.kfs.coa.businessobject.ObjectCodeCurrent;
025    import org.kuali.rice.kns.bo.Inactivateable;
026    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
027    import org.kuali.rice.kns.util.TypedArrayList;
028    
029    public class TaxRegion extends PersistableBusinessObjectBase implements Inactivateable {
030    
031        private String taxRegionCode; // (e.g., state code or district code)
032        private String taxRegionName; // (e.g., state name or tax district name)
033        private String taxRegionTypeCode;
034        private String chartOfAccountsCode;
035        private String accountNumber;
036        private String financialObjectCode;
037        private boolean active;
038        private boolean taxRegionUseTaxIndicator;
039    
040        private Chart chartOfAccounts;
041        private Account account;
042        private ObjectCodeCurrent objectCode;
043        private TaxRegionType taxRegionType;
044    
045        private List<TaxRegionRate> taxRegionRates = new TypedArrayList(TaxRegionRate.class);
046        private List<TaxRegionState> taxRegionStates = new TypedArrayList(TaxRegionState.class);
047        private List<TaxRegionCounty> taxRegionCounties = new TypedArrayList(TaxRegionCounty.class);
048        private List<TaxRegionPostalCode> taxRegionPostalCodes = new TypedArrayList(TaxRegionPostalCode.class);
049    
050        public List<TaxRegionRate> getTaxRegionRates() {
051            return taxRegionRates;
052        }
053    
054        public void setTaxRegionRates(List<TaxRegionRate> taxRegionRates) {
055            this.taxRegionRates = taxRegionRates;
056        }
057    
058        public List<TaxRegionState> getTaxRegionStates() {
059            return taxRegionStates;
060        }
061    
062        public void setTaxRegionStates(List<TaxRegionState> taxRegionStates) {
063            this.taxRegionStates = taxRegionStates;
064        }
065    
066        public List<TaxRegionCounty> getTaxRegionCounties() {
067            return taxRegionCounties;
068        }
069    
070        public void setTaxRegionCounties(List<TaxRegionCounty> taxRegionCounties) {
071            this.taxRegionCounties = taxRegionCounties;
072        }
073    
074        public List<TaxRegionPostalCode> getTaxRegionPostalCodes() {
075            return taxRegionPostalCodes;
076        }
077    
078        public void setTaxRegionPostalCodes(List<TaxRegionPostalCode> taxRegionPostalCodes) {
079            this.taxRegionPostalCodes = taxRegionPostalCodes;
080        }
081    
082        public TaxRegionType getTaxRegionType() {
083            return taxRegionType;
084        }
085    
086        public void setTaxRegionType(TaxRegionType taxRegionType) {
087            this.taxRegionType = taxRegionType;
088        }
089    
090        public String getAccountNumber() {
091            return accountNumber;
092        }
093    
094        public void setAccountNumber(String accountNumber) {
095            this.accountNumber = accountNumber;
096        }
097    
098        public boolean isActive() {
099            return active;
100        }
101    
102        public void setActive(boolean active) {
103            this.active = active;
104        }
105    
106        public String getChartOfAccountsCode() {
107            return chartOfAccountsCode;
108        }
109    
110        public void setChartOfAccountsCode(String chartOfAccountsCode) {
111            this.chartOfAccountsCode = chartOfAccountsCode;
112        }
113    
114        public String getFinancialObjectCode() {
115            return financialObjectCode;
116        }
117    
118        public void setFinancialObjectCode(String financialObjectCode) {
119            this.financialObjectCode = financialObjectCode;
120        }
121    
122        public String getTaxRegionCode() {
123            return taxRegionCode;
124        }
125    
126        public void setTaxRegionCode(String taxDistrictCode) {
127            this.taxRegionCode = taxDistrictCode;
128        }
129    
130        public String getTaxRegionName() {
131            return taxRegionName;
132        }
133    
134        public void setTaxRegionName(String taxDistrictName) {
135            this.taxRegionName = taxDistrictName;
136        }
137    
138        @Override
139        protected LinkedHashMap toStringMapper() {
140            // TODO Auto-generated method stub
141            return null;
142        }
143    
144        public String toString() {
145            return taxRegionTypeCode + "-" + taxRegionCode + "-" + taxRegionName;
146        }
147        
148        public Account getAccount() {
149            return account;
150        }
151    
152        public void setAccount(Account account) {
153            this.account = account;
154        }
155    
156        public Chart getChartOfAccounts() {
157            return chartOfAccounts;
158        }
159    
160        public void setChartOfAccounts(Chart chartOfAccounts) {
161            this.chartOfAccounts = chartOfAccounts;
162        }
163    
164        public ObjectCodeCurrent getObjectCode() {
165            return objectCode;
166        }
167    
168        public void setObjectCode(ObjectCodeCurrent objectCode) {
169            this.objectCode = objectCode;
170        }
171    
172        public String getTaxRegionTypeCode() {
173            return taxRegionTypeCode;
174        }
175    
176        public void setTaxRegionTypeCode(String taxRegionTypeCode) {
177            this.taxRegionTypeCode = taxRegionTypeCode;
178        }
179    
180        public boolean isTaxRegionUseTaxIndicator() {
181            return taxRegionUseTaxIndicator;
182        }
183    
184        public void setTaxRegionUseTaxIndicator(boolean taxRegionUseTaxIndicator) {
185            this.taxRegionUseTaxIndicator = taxRegionUseTaxIndicator;
186        }
187    
188        /**
189         * This method returns the effective tax region rate based off the date of transaction passed in
190         * @param dateOfTransaction
191         * @return
192         */
193        public TaxRegionRate getEffectiveTaxRegionRate(Date dateOfTransaction) {
194            TaxRegionRate selectedTaxRegionRate = null;
195    
196            for (TaxRegionRate taxRegionRate : taxRegionRates) {
197                if (taxRegionRate.getEffectiveDate().before(dateOfTransaction)) {
198                    selectedTaxRegionRate = taxRegionRate;
199                }
200            }
201            
202            return selectedTaxRegionRate;
203        }
204    }