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    }