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.io.Serializable;
019
020 import org.kuali.kfs.coa.businessobject.Account;
021 import org.kuali.kfs.coa.businessobject.BalanceType;
022 import org.kuali.kfs.coa.businessobject.ObjectCode;
023 import org.kuali.kfs.coa.businessobject.ObjectType;
024 import org.kuali.kfs.gl.businessobject.Transaction;
025 import org.kuali.kfs.sys.KFSConstants;
026 import org.kuali.rice.kns.util.KualiDecimal;
027
028 /**
029 * Represents a sufficient fund item which is used to show if a document has sufficient funds
030 */
031 public class SufficientFundsItem implements Serializable, Comparable {
032 private SystemOptions year;
033 private Account account;
034 private ObjectCode financialObject;
035 private ObjectType financialObjectType;
036 private String sufficientFundsObjectCode;
037 private KualiDecimal amount;
038 private String documentTypeCode;
039 private BalanceType balanceTyp;
040
041 public BalanceType getBalanceTyp() {
042 return balanceTyp;
043 }
044
045 public void setBalanceTyp(BalanceType balanceTyp) {
046 this.balanceTyp = balanceTyp;
047 }
048
049 public SufficientFundsItem() {
050 amount = KualiDecimal.ZERO;
051 }
052
053 /**
054 * Constructs a SufficientFundsItem.java.
055 * @param universityFiscalYear
056 * @param tran
057 * @param sufficientFundsObjectCode
058 */
059 public SufficientFundsItem(SystemOptions universityFiscalYear, Transaction tran, String sufficientFundsObjectCode) {
060
061 amount = KualiDecimal.ZERO;
062 year = universityFiscalYear;
063 account = tran.getAccount();
064 financialObject = tran.getFinancialObject();
065 financialObjectType = tran.getObjectType();
066 this.sufficientFundsObjectCode = sufficientFundsObjectCode;
067 this.balanceTyp = tran.getBalanceType();
068
069 add(tran);
070 }
071
072 /**
073 * Constructs a SufficientFundsItem.java.
074 * @param universityFiscalYear
075 * @param accountLine
076 * @param sufficientFundsObjectCode
077 */
078 public SufficientFundsItem(SystemOptions universityFiscalYear, AccountingLine accountLine, String sufficientFundsObjectCode) {
079
080 amount = KualiDecimal.ZERO;
081 year = universityFiscalYear;
082 account = accountLine.getAccount();
083 financialObject = accountLine.getObjectCode();
084 financialObjectType = accountLine.getObjectType();
085 this.sufficientFundsObjectCode = sufficientFundsObjectCode;
086 this.balanceTyp = accountLine.getBalanceTyp();
087
088 add(accountLine);
089 }
090
091 /**
092 * Adds an accounting line's amount to this sufficient funds item
093 * @param a accounting line
094 */
095 public void add(AccountingLine a) {
096 if (a.getObjectType().getFinObjectTypeDebitcreditCd().equals(a.getDebitCreditCode()) || KFSConstants.EMPTY_STRING.equals(a.getDebitCreditCode())) {
097 amount = amount.add(a.getAmount());
098 }
099 else {
100 amount = amount.subtract(a.getAmount());
101 }
102 }
103
104 /**
105 * Adds a transactions amount to this sufficient funds item
106 * @param t transactions
107 */
108 public void add(Transaction t) {
109 if (t.getObjectType().getFinObjectTypeDebitcreditCd().equals(t.getTransactionDebitCreditCode()) || KFSConstants.EMPTY_STRING.equals(t.getTransactionDebitCreditCode())) {
110 amount = amount.add(t.getTransactionLedgerEntryAmount());
111 }
112 else {
113 amount = amount.subtract(t.getTransactionLedgerEntryAmount());
114 }
115 }
116
117 /**
118 * Compare to other sufficient funds item based on key
119 *
120 * @see java.lang.Comparable#compareTo(java.lang.Object)
121 */
122 public int compareTo(Object arg0) {
123 SufficientFundsItem item = (SufficientFundsItem) arg0;
124 return getKey().compareTo(item.getKey());
125 }
126
127 /**
128 * Returns string to uniquely represent this sufficient funds item
129 *
130 * @return string with the following concatenated: fiscal year, chart of accounts code, account number, financial object type code, sufficient funds object code and balance type code
131 */
132 public String getKey() {
133 return year.getUniversityFiscalYear() + account.getChartOfAccountsCode() + account.getAccountNumber() + financialObjectType.getCode() + sufficientFundsObjectCode + balanceTyp.getCode();
134 }
135
136 public String getDocumentTypeCode() {
137 return documentTypeCode;
138 }
139
140 public void setDocumentTypeCode(String documentTypeCode) {
141 this.documentTypeCode = documentTypeCode;
142 }
143
144 public String getAccountSufficientFundsCode() {
145 return account.getAccountSufficientFundsCode();
146 }
147
148 public ObjectType getFinancialObjectType() {
149 return financialObjectType;
150 }
151
152 public void setFinancialObjectType(ObjectType financialObjectType) {
153 this.financialObjectType = financialObjectType;
154 }
155
156 @Override
157 public String toString() {
158 return year.getUniversityFiscalYear() + "-" + account.getChartOfAccountsCode() + "-" + account.getAccountNumber() + "-" + financialObject.getFinancialObjectCode() + "-" + account.getAccountSufficientFundsCode() + "-" + sufficientFundsObjectCode + "-" + amount.toString();
159 }
160
161 public Account getAccount() {
162 return account;
163 }
164
165 public void setAccount(Account account) {
166 this.account = account;
167 }
168
169 public KualiDecimal getAmount() {
170 return amount;
171 }
172
173 public void setAmount(KualiDecimal amount) {
174 this.amount = amount;
175 }
176
177 public ObjectCode getFinancialObject() {
178 return financialObject;
179 }
180
181 public void setFinancialObject(ObjectCode financialObject) {
182 this.financialObject = financialObject;
183 }
184
185 public String getSufficientFundsObjectCode() {
186 return sufficientFundsObjectCode;
187 }
188
189 public void setSufficientFundsObjectCode(String sufficientFundsObjectCode) {
190 this.sufficientFundsObjectCode = sufficientFundsObjectCode;
191 }
192
193 public SystemOptions getYear() {
194 return year;
195 }
196
197 public void setYear(SystemOptions year) {
198 this.year = year;
199 }
200
201
202 }