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.sql.Date; 019 import java.util.ArrayList; 020 import java.util.List; 021 022 import org.apache.ojb.broker.query.Criteria; 023 import org.apache.ojb.broker.query.QueryFactory; 024 import org.kuali.kfs.module.endow.EndowPropertyConstants; 025 import org.kuali.kfs.module.endow.businessobject.PooledFundControl; 026 import org.kuali.kfs.module.endow.businessobject.TransactionArchive; 027 import org.kuali.kfs.module.endow.businessobject.TransactionArchiveSecurity; 028 import org.kuali.kfs.module.endow.dataaccess.PooledFundControlTransactionsDao; 029 import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb; 030 031 public class PooledFundControlTransactionsDaoOjb extends PlatformAwareDaoBaseOjb implements PooledFundControlTransactionsDao { 032 033 /** 034 * @see org.kuali.kfs.module.endow.dataaccess.PooledFundControlTransactionsDao#getAllPooledFundControlTransaction() 035 */ 036 public List<PooledFundControl> getAllPooledFundControlTransaction() { 037 Criteria crit = new Criteria(); 038 crit.addEqualTo(EndowPropertyConstants.ENDOWCODEBASE_ACTIVE_INDICATOR, true); 039 return (List<PooledFundControl>) getPersistenceBrokerTemplate().getCollectionByQuery(QueryFactory.newQuery(PooledFundControl.class, crit)); 040 } 041 042 /** 043 * @see org.kuali.kfs.module.endow.dataaccess.PooledFundControlTransactionsDao#getTransactionArchiveSecurityWithSecurityId(java.lang.String, java.util.List) 044 */ 045 public List<TransactionArchiveSecurity> getTransactionArchiveSecurityWithSecurityId(PooledFundControl pooledFundControl, List<String> documentTypeNames, Date currentDate) { 046 047 String securityId = pooledFundControl.getPooledSecurityID(); 048 String kemid = pooledFundControl.getFundKEMID(); 049 050 // get the list of TransactionArchiveSecurity that has securityId 051 Criteria crit = new Criteria(); 052 crit.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_SECURITY_ID, pooledFundControl.getPooledSecurityID()); 053 List<TransactionArchiveSecurity> transactionArchiveSecurityRecords = (List<TransactionArchiveSecurity>) getPersistenceBrokerTemplate().getCollectionByQuery(QueryFactory.newQuery(TransactionArchiveSecurity.class, crit)); 054 055 // filter transactionArchiveSecurityRecords 056 List<TransactionArchiveSecurity> fnalTransactionArchiveSecurityRecords = new ArrayList<TransactionArchiveSecurity>(); 057 for (TransactionArchiveSecurity transactionArchiveSecurity : transactionArchiveSecurityRecords) { 058 if (existsTransactionArchiveSecurityWithDocNames(kemid, documentTypeNames, transactionArchiveSecurity, currentDate)) { 059 fnalTransactionArchiveSecurityRecords.add(transactionArchiveSecurity); 060 } 061 } 062 063 return fnalTransactionArchiveSecurityRecords; 064 } 065 066 /** 067 * @see org.kuali.kfs.module.endow.dataaccess.PooledFundControlTransactionsDao#getTransactionArchiveWithSecurityAndDocNames(java.lang.String, java.util.List) 068 */ 069 public List<TransactionArchive> getTransactionArchiveWithSecurityAndDocNames(PooledFundControl pooledFundControl, List<String> documentTypeNames, Date currentDate) { 070 071 String securityId = pooledFundControl.getPooledSecurityID(); 072 String kemid = pooledFundControl.getFundKEMID(); 073 074 // get the list of TransactionArchiveSecurity that has securityId 075 Criteria crit1 = new Criteria(); 076 crit1.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_SECURITY_ID, securityId); 077 List<TransactionArchiveSecurity> transactionArchiveSecurityRecords = (List<TransactionArchiveSecurity>) getPersistenceBrokerTemplate().getCollectionByQuery(QueryFactory.newQuery(TransactionArchiveSecurity.class, crit1)); 078 079 // get the list of TransactionArchive matching TransactionArchiveSecurity 080 Criteria crit2 = new Criteria(); 081 crit2.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_POSTED_DATE, currentDate); 082 crit2.addNotEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_KEM_ID, kemid); 083 if (documentTypeNames != null && !documentTypeNames.isEmpty()) { 084 crit2.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_TYPE_CODE, documentTypeNames); 085 } 086 Criteria crit3 = new Criteria(); 087 for (TransactionArchiveSecurity transactionArchiveSecurity : transactionArchiveSecurityRecords) { 088 Criteria c = new Criteria(); 089 c.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_DOCUMENT_NUMBER, transactionArchiveSecurity.getDocumentNumber()); 090 c.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_LINE_NUMBER, transactionArchiveSecurity.getLineNumber()); 091 c.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_LINE_TYPE_CODE, transactionArchiveSecurity.getLineTypeCode()); 092 crit3.addOrCriteria(c); 093 } 094 crit2.addAndCriteria(crit3); 095 096 return (List<TransactionArchive>) getPersistenceBrokerTemplate().getCollectionByQuery(QueryFactory.newQuery(TransactionArchive.class, crit2)); 097 } 098 099 /** 100 * Checks to see if the TransactionArchiveSecurity exists in TransactionArchive with the given condition 101 * @param documentTypeNames 102 * @param transactionArchiveSecurity 103 * @return 104 */ 105 protected boolean existsTransactionArchiveSecurityWithDocNames(String kemid, List<String> documentTypeNames, TransactionArchiveSecurity transactionArchiveSecurity, Date currentDate) { 106 Criteria crit = new Criteria(); 107 crit.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_POSTED_DATE, currentDate); 108 crit.addNotEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_KEM_ID, kemid); 109 if (documentTypeNames != null && !documentTypeNames.isEmpty()) { 110 crit.addIn(EndowPropertyConstants.TRANSACTION_ARCHIVE_TYPE_CODE, documentTypeNames); 111 } 112 crit.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_DOCUMENT_NUMBER, transactionArchiveSecurity.getDocumentNumber()); 113 crit.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_LINE_NUMBER, transactionArchiveSecurity.getLineNumber()); 114 crit.addEqualTo(EndowPropertyConstants.TRANSACTION_ARCHIVE_LINE_TYPE_CODE, transactionArchiveSecurity.getLineTypeCode()); 115 116 return getPersistenceBrokerTemplate().getCount(QueryFactory.newQuery(TransactionArchive.class, crit)) > 0 ? true : false; 117 } 118 119 }