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    
017    package org.kuali.kfs.module.bc.businessobject;
018    
019    import java.sql.Date;
020    import java.sql.Timestamp;
021    import java.util.Comparator;
022    import java.util.LinkedHashMap;
023    import java.util.List;
024    import java.util.SortedSet;
025    import java.util.TreeSet;
026    
027    import org.kuali.kfs.coa.businessobject.Account;
028    import org.kuali.kfs.coa.businessobject.Chart;
029    import org.kuali.kfs.coa.businessobject.Organization;
030    import org.kuali.kfs.coa.businessobject.SubAccount;
031    import org.kuali.kfs.sys.KFSPropertyConstants;
032    import org.kuali.kfs.sys.context.SpringContext;
033    import org.kuali.rice.kew.actiontaken.ActionTakenValue;
034    import org.kuali.rice.kew.actiontaken.service.ActionTakenService;
035    import org.kuali.rice.kns.bo.PersistableBusinessObjectBase;
036    
037    /**
038     * 
039     */
040    public class BudgetConstructionAccountSelect extends PersistableBusinessObjectBase {
041    
042        private String principalId;
043        private Integer universityFiscalYear;
044        private String chartOfAccountsCode;
045        private String accountNumber;
046        private String subAccountNumber;
047        private String documentNumber;
048        private Integer organizationLevelCode;
049        private String organizationChartOfAccountsCode;
050        private String organizationCode;
051        private String financialDocumentStatusCode;
052        private String financialDocumentInitiatorIdentifier;
053        private Date financialDocumentCreateDate;
054    
055        private BudgetConstructionHeader budgetConstructionHeader;
056        private Account account;
057        private Chart chartOfAccounts;
058        private Chart organizationChartOfAccounts;
059        private SubAccount subAccount;
060        private Organization organization;
061    
062        /**
063         * Default constructor.
064         */
065        public BudgetConstructionAccountSelect() {
066            super();
067        }
068    
069        /**
070         * Gets the principalId attribute.
071         * 
072         * @return Returns the principalId
073         */
074        public String getPrincipalId() {
075            return principalId;
076        }
077    
078        /**
079         * Sets the principalId attribute.
080         * 
081         * @param principalId The principalId to set.
082         */
083        public void setPrincipalId(String principalId) {
084            this.principalId = principalId;
085        }
086    
087    
088        /**
089         * Gets the universityFiscalYear attribute.
090         * 
091         * @return Returns the universityFiscalYear
092         */
093        public Integer getUniversityFiscalYear() {
094            return universityFiscalYear;
095        }
096    
097        /**
098         * Sets the universityFiscalYear attribute.
099         * 
100         * @param universityFiscalYear The universityFiscalYear to set.
101         */
102        public void setUniversityFiscalYear(Integer universityFiscalYear) {
103            this.universityFiscalYear = universityFiscalYear;
104        }
105    
106    
107        /**
108         * Gets the chartOfAccountsCode attribute.
109         * 
110         * @return Returns the chartOfAccountsCode
111         */
112        public String getChartOfAccountsCode() {
113            return chartOfAccountsCode;
114        }
115    
116        /**
117         * Sets the chartOfAccountsCode attribute.
118         * 
119         * @param chartOfAccountsCode The chartOfAccountsCode to set.
120         */
121        public void setChartOfAccountsCode(String chartOfAccountsCode) {
122            this.chartOfAccountsCode = chartOfAccountsCode;
123        }
124    
125    
126        /**
127         * Gets the accountNumber attribute.
128         * 
129         * @return Returns the accountNumber
130         */
131        public String getAccountNumber() {
132            return accountNumber;
133        }
134    
135        /**
136         * Sets the accountNumber attribute.
137         * 
138         * @param accountNumber The accountNumber to set.
139         */
140        public void setAccountNumber(String accountNumber) {
141            this.accountNumber = accountNumber;
142        }
143    
144    
145        /**
146         * Gets the subAccountNumber attribute.
147         * 
148         * @return Returns the subAccountNumber
149         */
150        public String getSubAccountNumber() {
151            return subAccountNumber;
152        }
153    
154        /**
155         * Sets the subAccountNumber attribute.
156         * 
157         * @param subAccountNumber The subAccountNumber to set.
158         */
159        public void setSubAccountNumber(String subAccountNumber) {
160            this.subAccountNumber = subAccountNumber;
161        }
162    
163    
164        /**
165         * Gets the documentNumber attribute.
166         * 
167         * @return Returns the documentNumber
168         */
169        public String getDocumentNumber() {
170            return documentNumber;
171        }
172    
173        /**
174         * Sets the documentNumber attribute.
175         * 
176         * @param documentNumber The documentNumber to set.
177         */
178        public void setDocumentNumber(String documentNumber) {
179            this.documentNumber = documentNumber;
180        }
181    
182    
183        /**
184         * Gets the organizationLevelCode attribute.
185         * 
186         * @return Returns the organizationLevelCode
187         */
188        public Integer getOrganizationLevelCode() {
189            return organizationLevelCode;
190        }
191    
192        /**
193         * Sets the organizationLevelCode attribute.
194         * 
195         * @param organizationLevelCode The organizationLevelCode to set.
196         */
197        public void setOrganizationLevelCode(Integer organizationLevelCode) {
198            this.organizationLevelCode = organizationLevelCode;
199        }
200    
201    
202        /**
203         * Gets the organizationChartOfAccountsCode attribute.
204         * 
205         * @return Returns the organizationChartOfAccountsCode
206         */
207        public String getOrganizationChartOfAccountsCode() {
208            return organizationChartOfAccountsCode;
209        }
210    
211        /**
212         * Sets the organizationChartOfAccountsCode attribute.
213         * 
214         * @param organizationChartOfAccountsCode The organizationChartOfAccountsCode to set.
215         */
216        public void setOrganizationChartOfAccountsCode(String organizationChartOfAccountsCode) {
217            this.organizationChartOfAccountsCode = organizationChartOfAccountsCode;
218        }
219    
220    
221        /**
222         * Gets the organizationCode attribute.
223         * 
224         * @return Returns the organizationCode
225         */
226        public String getOrganizationCode() {
227            return organizationCode;
228        }
229    
230        /**
231         * Sets the organizationCode attribute.
232         * 
233         * @param organizationCode The organizationCode to set.
234         */
235        public void setOrganizationCode(String organizationCode) {
236            this.organizationCode = organizationCode;
237        }
238    
239    
240        /**
241         * Gets the financialDocumentStatusCode attribute.
242         * 
243         * @return Returns the financialDocumentStatusCode
244         */
245        public String getFinancialDocumentStatusCode() {
246            return financialDocumentStatusCode;
247        }
248    
249        /**
250         * Sets the financialDocumentStatusCode attribute.
251         * 
252         * @param financialDocumentStatusCode The financialDocumentStatusCode to set.
253         */
254        public void setFinancialDocumentStatusCode(String financialDocumentStatusCode) {
255            this.financialDocumentStatusCode = financialDocumentStatusCode;
256        }
257    
258    
259        /**
260         * Gets the financialDocumentInitiatorIdentifier attribute.
261         * 
262         * @return Returns the financialDocumentInitiatorIdentifier
263         */
264        public String getFinancialDocumentInitiatorIdentifier() {
265    
266            if (this.financialDocumentInitiatorIdentifier == null) {
267                try {
268                    Long docNum = Long.valueOf(this.getDocumentNumber());
269    
270                    ActionTakenService actionTakenService = SpringContext.getBean(ActionTakenService.class);
271                    List<ActionTakenValue> actionsTaken = (List<ActionTakenValue>) actionTakenService.findByRouteHeaderIdIgnoreCurrentInd(docNum);
272                    SortedSet<ActionTakenValue> sortedActionsTaken = this.getSortedActionsTaken(actionsTaken);
273                    if (sortedActionsTaken.size() > 0) {
274                        this.financialDocumentInitiatorIdentifier = SpringContext.getBean(org.kuali.rice.kim.service.PersonService.class).getPerson(sortedActionsTaken.last().getPrincipalId()).getPrincipalName();
275                        this.financialDocumentCreateDate = new Date(sortedActionsTaken.last().getActionDate().getTime());
276                    }
277                    else {
278                        this.financialDocumentInitiatorIdentifier = "NotFound";
279                    }
280    
281    
282                }
283                catch (Exception e) {
284                    this.financialDocumentInitiatorIdentifier = "LookupError";
285                }
286            }
287            return financialDocumentInitiatorIdentifier;
288        }
289    
290        /**
291         * Sets the financialDocumentInitiatorIdentifier attribute.
292         * 
293         * @param financialDocumentInitiatorIdentifier The financialDocumentInitiatorIdentifier to set.
294         */
295        public void setFinancialDocumentInitiatorIdentifier(String financialDocumentInitiatorIdentifier) {
296            this.financialDocumentInitiatorIdentifier = financialDocumentInitiatorIdentifier;
297        }
298    
299    
300        /**
301         * Gets the financialDocumentCreateDate attribute.
302         * 
303         * @return Returns the financialDocumentCreateDate
304         */
305        public Date getFinancialDocumentCreateDate() {
306    
307            if (this.financialDocumentCreateDate == null) {
308                try {
309                    Long docNum = Long.valueOf(this.getDocumentNumber());
310    
311                    ActionTakenService actionTakenService = SpringContext.getBean(ActionTakenService.class);
312                    List<ActionTakenValue> actionsTaken = (List<ActionTakenValue>) actionTakenService.findByRouteHeaderIdIgnoreCurrentInd(docNum);
313                    SortedSet<ActionTakenValue> sortedActionsTaken = this.getSortedActionsTaken(actionsTaken);
314                    if (sortedActionsTaken.size() > 0) {
315                        this.financialDocumentInitiatorIdentifier = SpringContext.getBean(org.kuali.rice.kim.service.PersonService.class).getPerson(sortedActionsTaken.last().getPrincipalId()).getPrincipalName();
316                        this.financialDocumentCreateDate = new Date(sortedActionsTaken.last().getActionDate().getTime());
317                    }
318    
319                }
320                catch (Exception e) {
321                    // nothing
322                }
323            }
324            return financialDocumentCreateDate;
325        }
326    
327        /**
328         * Sets the financialDocumentCreateDate attribute.
329         * 
330         * @param financialDocumentCreateDate The financialDocumentCreateDate to set.
331         */
332        public void setFinancialDocumentCreateDate(Date financialDocumentCreateDate) {
333            this.financialDocumentCreateDate = financialDocumentCreateDate;
334        }
335    
336    
337        /**
338         * Gets the budgetConstructionHeader attribute.
339         * 
340         * @return Returns the budgetConstructionHeader
341         */
342        public BudgetConstructionHeader getBudgetConstructionHeader() {
343            return budgetConstructionHeader;
344        }
345    
346        /**
347         * Sets the budgetConstructionHeader attribute.
348         * 
349         * @param budgetConstructionHeader The budgetConstructionHeader to set.
350         * @deprecated
351         */
352        public void setBudgetConstructionHeader(BudgetConstructionHeader budgetConstructionHeader) {
353            this.budgetConstructionHeader = budgetConstructionHeader;
354        }
355    
356        /**
357         * Gets the organization attribute.
358         * 
359         * @return Returns the organization
360         */
361        public Organization getOrganization() {
362            return organization;
363        }
364    
365        /**
366         * Sets the organization attribute.
367         * 
368         * @param organization The organization to set.
369         * @deprecated
370         */
371        public void setOrganization(Organization organization) {
372            this.organization = organization;
373        }
374    
375        /**
376         * Gets the account attribute.
377         * 
378         * @return Returns the account
379         */
380        public Account getAccount() {
381            return account;
382        }
383    
384        /**
385         * Sets the account attribute.
386         * 
387         * @param account The account to set.
388         * @deprecated
389         */
390        public void setAccount(Account account) {
391            this.account = account;
392        }
393    
394        /**
395         * Gets the chartOfAccounts attribute.
396         * 
397         * @return Returns the chartOfAccounts
398         */
399        public Chart getChartOfAccounts() {
400            return chartOfAccounts;
401        }
402    
403        /**
404         * Sets the chartOfAccounts attribute.
405         * 
406         * @param chartOfAccounts The chartOfAccounts to set.
407         * @deprecated
408         */
409        public void setChartOfAccounts(Chart chartOfAccounts) {
410            this.chartOfAccounts = chartOfAccounts;
411        }
412    
413        /**
414         * Gets the organizationChartOfAccounts attribute.
415         * 
416         * @return Returns the organizationChartOfAccounts
417         */
418        public Chart getOrganizationChartOfAccounts() {
419            return organizationChartOfAccounts;
420        }
421    
422        /**
423         * Sets the organizationChartOfAccounts attribute.
424         * 
425         * @param organizationChartOfAccounts The organizationChartOfAccounts to set.
426         * @deprecated
427         */
428        public void setOrganizationChartOfAccounts(Chart organizationChartOfAccounts) {
429            this.organizationChartOfAccounts = organizationChartOfAccounts;
430        }
431    
432        /**
433         * Gets the subAccount attribute.
434         * 
435         * @return Returns the subAccount.
436         */
437        public SubAccount getSubAccount() {
438            return subAccount;
439        }
440    
441        /**
442         * Sets the subAccount attribute value.
443         * 
444         * @param subAccount The subAccount to set.
445         * @deprecated
446         */
447        public void setSubAccount(SubAccount subAccount) {
448            this.subAccount = subAccount;
449        }
450        
451        /**
452         * Takes a list of ActionTakenValue and returns a sorted set ordered by action date
453         *  
454         * @param actionsTaken
455         * @return
456         */
457        protected SortedSet<ActionTakenValue> getSortedActionsTaken(List<ActionTakenValue> actionsTaken){
458    
459            // we need a sorted set of actions taken by action date
460            SortedSet<ActionTakenValue> sortedActionsTaken = new TreeSet<ActionTakenValue>(new Comparator<ActionTakenValue>(){
461                public int compare(ActionTakenValue aTaken, ActionTakenValue bTaken){
462                    Timestamp aActionDate = aTaken.getActionDate();
463                    Timestamp bActionDate = bTaken.getActionDate();
464                    return aActionDate.compareTo(bActionDate);
465                }
466            });
467            sortedActionsTaken.addAll(actionsTaken);
468            return sortedActionsTaken;
469            
470        }
471    
472        /**
473         * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
474         */
475        protected LinkedHashMap toStringMapper() {
476            LinkedHashMap m = new LinkedHashMap();
477            m.put("principalId", this.principalId);
478            if (this.universityFiscalYear != null) {
479                m.put("universityFiscalYear", this.universityFiscalYear.toString());
480            }
481            m.put("chartOfAccountsCode", this.chartOfAccountsCode);
482            m.put("accountNumber", this.accountNumber);
483            m.put("subAccountNumber", this.subAccountNumber);
484            m.put(KFSPropertyConstants.DOCUMENT_NUMBER, this.documentNumber);
485            return m;
486        }
487    
488    
489    }
490