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.module.endow.dataaccess.impl;
017    
018    import java.math.BigDecimal;
019    import java.sql.Date;
020    import java.text.ParseException;
021    import java.util.ArrayList;
022    import java.util.Collection;
023    import java.util.HashMap;
024    import java.util.Iterator;
025    import java.util.List;
026    import java.util.Map;
027    
028    import org.apache.commons.lang.StringUtils;
029    import org.apache.ojb.broker.query.Criteria;
030    import org.apache.ojb.broker.query.QueryByCriteria;
031    import org.apache.ojb.broker.query.QueryFactory;
032    import org.apache.ojb.broker.query.ReportQueryByCriteria;
033    import org.kuali.kfs.module.endow.EndowConstants;
034    import org.kuali.kfs.module.endow.EndowPropertyConstants;
035    import org.kuali.kfs.module.endow.businessobject.FeeEndowmentTransactionCode;
036    import org.kuali.kfs.module.endow.businessobject.FeeMethod;
037    import org.kuali.kfs.module.endow.businessobject.FeeTransaction;
038    import org.kuali.kfs.module.endow.businessobject.KEMID;
039    import org.kuali.kfs.module.endow.businessobject.KemidBenefittingOrganization;
040    import org.kuali.kfs.module.endow.businessobject.TransactionArchive;
041    import org.kuali.kfs.module.endow.businessobject.TypeRestrictionCode;
042    import org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao;
043    import org.kuali.kfs.sys.context.SpringContext;
044    import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb;
045    import org.kuali.rice.kns.service.DataDictionaryService;
046    import org.kuali.rice.kns.service.DateTimeService;
047    
048    public class TransactionArchiveDaoOjb extends PlatformAwareDaoBaseOjb implements TransactionArchiveDao {
049        protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(TransactionArchiveDaoOjb.class);
050        
051        /**
052         * @@see {@link org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getAllTransactionArchives(Date)
053         */
054        public Collection<TransactionArchive> getAllTransactionArchives(java.util.Date postedDate) {
055            Collection<TransactionArchive> transactionArchives = new ArrayList();
056            
057            Criteria criteria = new Criteria();
058            criteria.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_POSTED_DATE, postedDate);
059            
060            //sort the data on these columns....
061            QueryByCriteria qbc = QueryFactory.newQuery(TransactionArchive.class, criteria);
062    
063            qbc.addOrderByAscending(EndowPropertyConstants.TRANSACTION_ARCHIVE_TYPE_CODE);
064            qbc.addOrderByAscending(EndowPropertyConstants.TRANSACTION_ARCHIVE_SUB_TYPE_CODE);
065            qbc.addOrderByAscending(EndowPropertyConstants.TRANSACTION_ARCHIVE_INCOME_PRINCIPAL_INDICATOR);
066            qbc.addOrderByAscending(EndowPropertyConstants.TRANSACTION_ARCHIVE_KEM_ID);
067            qbc.addOrderByAscending(EndowPropertyConstants.TRANSACTION_ARCHIVE_ETRAN_CODE);
068    
069            transactionArchives = getPersistenceBrokerTemplate().getCollectionByQuery(qbc);
070            
071            return transactionArchives;
072        }
073    
074        /**
075         * @@see {@link org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getAllTransactionArchives()
076         */
077        public Collection<TransactionArchive> getAllTransactionArchives() {
078            Collection<TransactionArchive> transactionArchives = new ArrayList();
079            
080            Criteria criteria = new Criteria();
081            criteria.addNotNull(EndowPropertyConstants.DOCUMENT_NUMBER);
082    
083            QueryByCriteria query = QueryFactory.newQuery(TransactionArchive.class, criteria);
084            transactionArchives = getPersistenceBrokerTemplate().getCollectionByQuery(query);
085            
086            return transactionArchives;
087        }
088        
089        /**
090         * @see org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getByPrimaryKey(String, int, String)
091         */
092        public TransactionArchive getByPrimaryKey(String documentNumber, int lineNumber, String lineTypeCode) {
093            TransactionArchive transactionArchive = null;
094            
095            Criteria criteria = new Criteria();
096            criteria.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_DOCUMENT_NUMBER, documentNumber);
097            criteria.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_LINE_NUMBER, lineNumber);
098    
099            if (SpringContext.getBean(DataDictionaryService.class).getAttributeForceUppercase(TransactionArchive.class, EndowPropertyConstants.TRANSACTION_ARCHIVE_LINE_TYPE_CODE)) {
100                lineTypeCode = lineTypeCode.toUpperCase();
101            }
102            criteria.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_LINE_TYPE_CODE, lineTypeCode);
103            
104            QueryByCriteria query = QueryFactory.newQuery(TransactionArchive.class, criteria);
105            transactionArchive = (TransactionArchive) getPersistenceBrokerTemplate().getObjectByQuery(query);
106            
107            return transactionArchive;
108        }
109        
110        /**
111         * Prepares the criteria to select the records from END_TRAN_ARCHV_T table
112         */
113        protected Collection<TransactionArchive> getTransactionArchivesForTransactions(FeeMethod feeMethod) {
114            Collection<TransactionArchive> transactionArchives = new ArrayList(); 
115            
116            Collection incomePrincipalValues = new ArrayList();
117            incomePrincipalValues.add(EndowConstants.FeeMethod.FEE_BASE_CODE_VALUE_FOR_INCOME);
118            incomePrincipalValues.add(EndowConstants.FeeMethod.FEE_BASE_CODE_VALUE_FOR_PRINCIPAL);
119            
120            Criteria criteria = new Criteria();
121            
122            if (feeMethod.getFeeBaseCode().equalsIgnoreCase(EndowConstants.FeeMethod.FEE_BASE_CODE_VALUE_FOR_INCOME_AND_PRINCIPAL)) {
123                criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_INCOME_PRINCIPAL_INDICATOR, incomePrincipalValues);
124            }
125            else {
126                if (feeMethod.getFeeBaseCode().equalsIgnoreCase(EndowConstants.FeeMethod.FEE_BASE_CODE_VALUE_FOR_INCOME)) {
127                    criteria.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_INCOME_PRINCIPAL_INDICATOR, EndowConstants.FeeMethod.FEE_BASE_CODE_VALUE_FOR_INCOME);
128                    
129                }
130                if (feeMethod.getFeeBaseCode().equalsIgnoreCase(EndowConstants.FeeMethod.FEE_BASE_CODE_VALUE_FOR_PRINCIPAL)) {
131                    criteria.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_INCOME_PRINCIPAL_INDICATOR, EndowConstants.FeeMethod.FEE_BASE_CODE_VALUE_FOR_PRINCIPAL);
132                }
133            }
134    
135            if (feeMethod.getFeeByTransactionType() && feeMethod.getFeeByETranCode()) {
136                criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_TYPE_CODE, getTypeCodes(feeMethod.getCode()));
137                criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_ETRAN_CODE, getETranCodes(feeMethod.getCode()));
138            }
139            else {
140                if (feeMethod.getFeeByTransactionType()) {
141                    criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_TYPE_CODE, getTypeCodes(feeMethod.getCode()));
142                }
143                
144                if (feeMethod.getFeeByETranCode()) {
145                    criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_ETRAN_CODE, getETranCodes(feeMethod.getCode()));
146                }
147            }
148            
149            if (feeMethod.getFeeByTransactionType() || feeMethod.getFeeByETranCode()) {
150                criteria.addGreaterThan(EndowPropertyConstants.TRANSACTION_ARCHIVE_POSTED_DATE,feeMethod.getFeeLastProcessDate());
151            }
152    
153            QueryByCriteria query = QueryFactory.newQuery(TransactionArchive.class, criteria);
154                
155            transactionArchives = getPersistenceBrokerTemplate().getCollectionByQuery(query);
156            
157            return transactionArchives;
158        }
159            
160        /**
161         * @see org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getTransactionArchivesCountForTransactions(FeeMethod)
162         */
163        public long getTransactionArchivesCountForTransactions(FeeMethod feeMethod) {
164            long totalTransactionArchives = 0;
165            totalTransactionArchives = getTransactionArchivesForTransactions(feeMethod).size();
166            
167            return totalTransactionArchives;
168        }
169        
170        /**
171         * @see org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getTransactionArchivesIncomeCashAmountForTransactions(FeeMethod)
172         */
173        public BigDecimal getTransactionArchivesIncomeCashAmountForTransactions(FeeMethod feeMethod) {
174            BigDecimal incomeCashAmount = BigDecimal.ZERO;
175            
176            Collection<TransactionArchive> transactionArchives = new ArrayList();        
177            transactionArchives = getTransactionArchivesForTransactions(feeMethod);
178            for (TransactionArchive transactionArchive : transactionArchives) {
179                incomeCashAmount = incomeCashAmount.add(transactionArchive.getIncomeCashAmount());
180            }
181            
182            return incomeCashAmount;
183        }
184        
185        /**
186         * @see org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getTransactionArchivesPrincipalCashAmountForTransactions(FeeMethod)
187         */
188        public BigDecimal getTransactionArchivesPrincipalCashAmountForTransactions(FeeMethod feeMethod) {
189            BigDecimal principalCashAmount = new BigDecimal("0");
190            
191            Collection<TransactionArchive> transactionArchives = new ArrayList();        
192            transactionArchives = getTransactionArchivesForTransactions(feeMethod);
193            for (TransactionArchive transactionArchive : transactionArchives) {
194                principalCashAmount = principalCashAmount.add(transactionArchive.getPrincipalCashAmount());
195            }
196            
197            return principalCashAmount;
198        }
199        
200        /**
201         * @see org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getTransactionArchivesIncomeAndPrincipalCashAmountForTransactions(FeeMethod)
202         */
203        public HashMap<String, BigDecimal> getTransactionArchivesIncomeAndPrincipalCashAmountForTransactions(FeeMethod feeMethod) {
204            BigDecimal incomeCashAmount = BigDecimal.ZERO;
205            BigDecimal principalCashAmount = BigDecimal.ZERO;
206            
207            HashMap<String, BigDecimal> incomeAndPrincipalCashAmounts = new HashMap();
208            
209            incomeAndPrincipalCashAmounts.put(EndowPropertyConstants.TRANSACTION_ARCHIVE_INCOME_CASH_AMOUNT, getTransactionArchivesIncomeCashAmountForTransactions(feeMethod));
210            incomeAndPrincipalCashAmounts.put(EndowPropertyConstants.TRANSACTION_ARCHIVE_PRINCIPAL_CASH_AMOUNT, getTransactionArchivesPrincipalCashAmountForTransactions(feeMethod));
211            
212            return incomeAndPrincipalCashAmounts;
213        }
214        
215        /**
216         * @see org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getTransactionArchivesCountByDocumentTypeName(String, long)
217         */
218        public long getTransactionArchivesCountByDocumentTypeName(String feeMethodCode, Date transactionPostedDate) {
219            long totalTransactionArchives = 0;
220            
221            Criteria criteria = new Criteria();
222            criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_TYPE_CODE, getTypeCodes(feeMethodCode));
223            criteria.addGreaterThan(EndowPropertyConstants.TRANSACTION_ARCHIVE_POSTED_DATE, transactionPostedDate);
224            QueryByCriteria query = QueryFactory.newQuery(TransactionArchive.class, criteria);
225                
226            totalTransactionArchives = getPersistenceBrokerTemplate().getCollectionByQuery(query).size();
227            
228            return totalTransactionArchives;
229        }
230        
231        /**
232         * Gets the document Type codes for a given feeMethodCode in END_FEE_TRAN_DOC_TYP_T table
233         * @feeMethodCode FEE_MTH
234         * @return typeCodes
235         */
236        protected Collection getTypeCodes(String feeMethodCode) {
237            Collection typeCodes = new ArrayList();
238            Collection<FeeTransaction> feeTransactions = new ArrayList();        
239    
240            if (StringUtils.isNotBlank(feeMethodCode)) {        
241                Map<String, String>  crit = new HashMap<String, String>();
242                
243                if (SpringContext.getBean(DataDictionaryService.class).getAttributeForceUppercase(FeeTransaction.class, EndowPropertyConstants.FEE_METHOD_CODE)) {
244                    feeMethodCode = feeMethodCode.toUpperCase();
245                }
246                
247                Criteria criteria = new Criteria();
248                criteria.addEqualTo(EndowPropertyConstants.FEE_METHOD_CODE, feeMethodCode);
249                criteria.addEqualTo(EndowPropertyConstants.FEE_TRANSACTION_INCLUDE, EndowConstants.YES);
250                QueryByCriteria query = QueryFactory.newQuery(FeeTransaction.class, criteria);
251                
252                feeTransactions = getPersistenceBrokerTemplate().getCollectionByQuery(query);
253                for (FeeTransaction feeTransaction : feeTransactions) {
254                    typeCodes.add(feeTransaction.getDocumentTypeName());
255                }
256            }
257            
258            return typeCodes;
259        }
260        
261        /**
262         * @see org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getTransactionArchivesCountByETranCode(String, long)
263         */
264        public long getTransactionArchivesCountByETranCode(String feeMethodCode, Date transactionPostedDate) {
265            long totalTransactionArchives = 0;
266            
267            Criteria criteria = new Criteria();
268            criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_ETRAN_CODE, getETranCodes(feeMethodCode));
269            criteria.addGreaterThan(EndowPropertyConstants.TRANSACTION_ARCHIVE_POSTED_DATE, transactionPostedDate);
270            QueryByCriteria query = QueryFactory.newQuery(TransactionArchive.class, criteria);
271                
272            totalTransactionArchives = getPersistenceBrokerTemplate().getCollectionByQuery(query).size();
273            
274            return totalTransactionArchives;
275        }
276    
277        /**
278         * Gets the document Type codes for a given feeMethodCode in END_FEE_TRAN_DOC_TYP_T table
279         * @feeMethodCode FEE_MTH
280         * @return typeCodes
281         */
282        protected Collection getETranCodes(String feeMethodCode) {
283            Collection<FeeEndowmentTransactionCode> feeEndowmentTransactions = new ArrayList();
284            Collection etranCodes = new ArrayList();
285            
286            if (StringUtils.isNotBlank(feeMethodCode)) {        
287                Map<String, String>  crit = new HashMap<String, String>();
288                
289                if (SpringContext.getBean(DataDictionaryService.class).getAttributeForceUppercase(FeeEndowmentTransactionCode.class, EndowPropertyConstants.FEE_METHOD_CODE)) {
290                    feeMethodCode = feeMethodCode.toUpperCase();
291                }
292                
293                Criteria criteria = new Criteria();
294                criteria.addEqualTo(EndowPropertyConstants.FEE_METHOD_CODE, feeMethodCode);
295                criteria.addEqualTo(EndowPropertyConstants.FEE_ENDOWMENT_TRANSACTION_INCLUDE, EndowConstants.YES);
296                QueryByCriteria query = QueryFactory.newQuery(FeeEndowmentTransactionCode.class, criteria);
297                
298                feeEndowmentTransactions = getPersistenceBrokerTemplate().getCollectionByQuery(query);
299                for (FeeEndowmentTransactionCode feeEndowmentTransaction : feeEndowmentTransactions) {
300                    etranCodes.add(feeEndowmentTransaction.getEndowmentTransactionCode());
301                }
302            }
303                
304            return etranCodes;
305        }
306        
307        /**
308         * @see org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getTransactionArchivesCountByDocumentTypeNameAndETranCode(String, long)
309         */
310        public long getTransactionArchivesCountByDocumentTypeNameAndETranCode(String feeMethodCode, Date transactionPostedDate) {
311            long totalTransactionArchives = 0;
312    
313            Criteria criteria = new Criteria();
314            criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_TYPE_CODE, getTypeCodes(feeMethodCode));
315            criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_ETRAN_CODE, getETranCodes(feeMethodCode));
316            criteria.addGreaterThan(EndowPropertyConstants.TRANSACTION_ARCHIVE_POSTED_DATE, transactionPostedDate);
317            QueryByCriteria query = QueryFactory.newQuery(TransactionArchive.class, criteria);
318                
319            totalTransactionArchives = getPersistenceBrokerTemplate().getCollectionByQuery(query).size();
320            
321            return totalTransactionArchives;
322        }
323        
324        /**
325         * @see org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getTransactionArchivesCountByIncomeOrPrincipal(String)
326         */
327        public long getTransactionArchivesCountByIncomeOrPrincipal(String incomeOrPrincipalIndicator) {
328            long totalTransactionArchives = 0;
329    
330            Criteria criteria = new Criteria();
331            criteria.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_INCOME_PRINCIPAL_INDICATOR, incomeOrPrincipalIndicator);
332            QueryByCriteria query = QueryFactory.newQuery(TransactionArchive.class, criteria);
333                
334            totalTransactionArchives = getPersistenceBrokerTemplate().getCollectionByQuery(query).size();
335            
336            return totalTransactionArchives;
337        }
338        
339        /**
340         * @see org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getTransactionArchivesCountByBothIncomeAndPrincipal()
341         */
342        public long getTransactionArchivesCountByBothIncomeAndPrincipal(FeeMethod feeMethod) {
343            long totalTransactionArchives = 0;
344            
345            Collection incomePrincipalValues = new ArrayList();
346            incomePrincipalValues.add(EndowConstants.FeeMethod.FEE_BASE_CODE_VALUE_FOR_INCOME);
347            incomePrincipalValues.add(EndowConstants.FeeMethod.FEE_BASE_CODE_VALUE_FOR_PRINCIPAL);
348            
349            Criteria criteria = new Criteria();
350            criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_INCOME_PRINCIPAL_INDICATOR, incomePrincipalValues);
351    
352            if (feeMethod.getFeeByTransactionType() && feeMethod.getFeeByETranCode()) {
353                criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_TYPE_CODE, getTypeCodes(feeMethod.getCode()));
354                criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_ETRAN_CODE, getETranCodes(feeMethod.getCode()));
355            }
356            else {
357                if (feeMethod.getFeeByTransactionType()) {
358                    criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_TYPE_CODE, getTypeCodes(feeMethod.getCode()));
359                }
360                
361                if (feeMethod.getFeeByETranCode()) {
362                    criteria.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_ETRAN_CODE, getETranCodes(feeMethod.getCode()));
363                }
364            }
365            
366            if (feeMethod.getFeeByTransactionType() || feeMethod.getFeeByETranCode()) {
367                criteria.addGreaterThan(EndowPropertyConstants.TRANSACTION_ARCHIVE_POSTED_DATE,feeMethod.getFeeLastProcessDate());
368            }
369    
370            QueryByCriteria query = QueryFactory.newQuery(TransactionArchive.class, criteria);
371                
372            totalTransactionArchives = getPersistenceBrokerTemplate().getCollectionByQuery(query).size();
373            
374            return totalTransactionArchives;
375        }
376        
377        /**
378         * @see org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getTransactionArchivesTotalCashActivity(String)
379         */
380        public BigDecimal getTransactionArchivesTotalCashActivity(String kemid, String securityId) {
381            BigDecimal totalCashActivity = BigDecimal.ZERO;
382            
383            Collection<TransactionArchive> transactionArchives = new ArrayList();
384            
385            Criteria criteria = new Criteria();
386    
387            if (SpringContext.getBean(DataDictionaryService.class).getAttributeForceUppercase(TransactionArchive.class, EndowPropertyConstants.TRANSACTION_ARCHIVE_KEM_ID)) {
388                kemid = kemid.toUpperCase();
389            }
390            criteria.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_KEM_ID, kemid);
391            
392            QueryByCriteria query = QueryFactory.newQuery(TransactionArchive.class, criteria);
393            transactionArchives = getPersistenceBrokerTemplate().getCollectionByQuery(query);
394            
395            for (TransactionArchive transactionArchive : transactionArchives) {
396                if (transactionArchive.getArchiveSecurity().getSecurityId().equals(securityId)) {
397                    totalCashActivity = totalCashActivity.add(transactionArchive.getIncomeCashAmount());
398                    totalCashActivity = totalCashActivity.add(transactionArchive.getPrincipalCashAmount());
399                }
400            }
401            
402            return totalCashActivity;
403        }
404        
405        /**
406         * 
407         * @see org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getTransactionArchiveByKemidsAndPostedDate(java.lang.String, java.lang.String, java.util.Date, java.util.Date, java.lang.String, java.lang.String)
408         */
409        public List<TransactionArchive> getTransactionArchiveByKemidsAndPostedDate(String kemid, String endowmentOption, java.util.Date beginningDate, java.util.Date endingDate, String closedIndicator, String transactionSubType) {
410            
411            Criteria criteria = new Criteria();
412            criteria.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_KEM_ID, kemid);
413            criteria.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_SUB_TYPE_CODE, transactionSubType);
414            criteria.addGreaterOrEqualThan(EndowPropertyConstants.TRANSACTION_ARCHIVE_POSTED_DATE, beginningDate);
415            criteria.addLessOrEqualThan(EndowPropertyConstants.TRANSACTION_ARCHIVE_POSTED_DATE, endingDate);
416            
417            QueryByCriteria qbc = QueryFactory.newQuery(TransactionArchive.class, criteria);
418            qbc.addOrderByAscending(EndowPropertyConstants.TRANSACTION_ARCHIVE_POSTED_DATE);
419    
420            return (List<TransactionArchive>) getPersistenceBrokerTemplate().getCollectionByQuery(qbc);
421                
422        }
423        
424        /**
425         * @see org.kuali.kfs.module.endow.dataaccess.TransactionArchiveDao#getTransactionArchivesByKemid(java.lang.String, java.util.Date, java.util.Date)
426         */
427        public List<TransactionArchive> getTransactionArchivesByKemid(String kemid, java.util.Date beginningDate, java.util.Date endingDate) {
428            Criteria criteria = new Criteria();
429            criteria.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_KEM_ID, kemid);
430            criteria.addGreaterOrEqualThan(EndowPropertyConstants.TRANSACTION_ARCHIVE_POSTED_DATE, beginningDate);
431            criteria.addLessOrEqualThan(EndowPropertyConstants.TRANSACTION_ARCHIVE_POSTED_DATE, endingDate);
432            
433            List<String> documentTypesAllowed = new ArrayList();
434            documentTypesAllowed.add(EndowConstants.DocumentTypeNames.ENDOWMENT_CASH_INCREASE);
435            documentTypesAllowed.add(EndowConstants.DocumentTypeNames.ENDOWMENT_CASH_DECREASE);
436            documentTypesAllowed.add(EndowConstants.DocumentTypeNames.ENDOWMENT_CASH_TRANSFER);
437            documentTypesAllowed.add(EndowConstants.DocumentTypeNames.ENDOWMENT_SECURITY_TRANSFER);
438            
439            Criteria c = new Criteria();
440            c.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_TYPE_CODE, documentTypesAllowed);
441            
442            Criteria c1 = new Criteria();
443            documentTypesAllowed.clear();
444            documentTypesAllowed.add(EndowConstants.DocumentTypeNames.ENDOWMENT_ASSET_INCREASE);
445            documentTypesAllowed.add(EndowConstants.DocumentTypeNames.ENDOWMENT_ASSET_DECREASE);
446            documentTypesAllowed.add(EndowConstants.DocumentTypeNames.ENDOWMENT_LIABILITY_DECREASE);
447            c1.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_TYPE_CODE, documentTypesAllowed);
448            c1.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_SUB_TYPE_CODE, EndowConstants.TransactionSubTypeCode.NON_CASH);
449            
450            c.addOrCriteria(c1);
451            
452            criteria.addAndCriteria(c);
453            
454            QueryByCriteria qbc2 = QueryFactory.newQuery(TransactionArchive.class, criteria);
455            qbc2.addOrderByAscending(EndowPropertyConstants.TRANSACTION_ARCHIVE_KEM_ID);        
456            qbc2.addOrderByAscending(EndowPropertyConstants.TRANSACTION_ARCHIVE_ETRAN_CODE);
457            
458            return (List<TransactionArchive>) getPersistenceBrokerTemplate().getCollectionByQuery(qbc2);
459        }
460    }