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 }