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.cab.batch.dataaccess.impl;
017    
018    import java.sql.Timestamp;
019    import java.text.ParseException;
020    import java.util.Collection;
021    
022    import org.apache.ojb.broker.query.Criteria;
023    import org.apache.ojb.broker.query.QueryByCriteria;
024    import org.kuali.kfs.gl.businessobject.Entry;
025    import org.kuali.kfs.module.cab.CabConstants;
026    import org.kuali.kfs.module.cab.CabPropertyConstants;
027    import org.kuali.kfs.module.cab.batch.dataaccess.ExtractDao;
028    import org.kuali.kfs.module.cab.businessobject.BatchParameters;
029    import org.kuali.kfs.module.purap.businessobject.CreditMemoAccountRevision;
030    import org.kuali.kfs.module.purap.businessobject.PaymentRequestAccountRevision;
031    import org.kuali.kfs.module.purap.businessobject.PurchaseOrderAccount;
032    import org.kuali.kfs.sys.context.SpringContext;
033    import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb;
034    import org.kuali.rice.kns.service.DateTimeService;
035    
036    public class ExtractDaoOjb extends PlatformAwareDaoBaseOjb implements ExtractDao {
037        /**
038         * @see org.kuali.kfs.module.cab.batch.dataaccess.ExtractDao#findMatchingGLEntries(org.kuali.kfs.module.cab.businessobject.BatchParameters)
039         */
040        public Collection<Entry> findMatchingGLEntries(BatchParameters batchParameters) {
041            Criteria criteria = new Criteria();
042            criteria.addGreaterThan(CabPropertyConstants.Entry.TRANSACTION_DATE_TIME_STAMP, batchParameters.getLastRunTime());
043    
044            if (!batchParameters.getExcludedChartCodes().isEmpty())        
045                criteria.addNotIn(CabPropertyConstants.Entry.CHART_OF_ACCOUNTS_CODE, batchParameters.getExcludedChartCodes());
046            
047            if (!batchParameters.getExcludedSubFundCodes().isEmpty())
048                criteria.addNotIn(CabPropertyConstants.Entry.ACCOUNT_SUB_FUND_GROUP_CODE, batchParameters.getExcludedSubFundCodes());
049            
050            if (!batchParameters.getIncludedFinancialBalanceTypeCodes().isEmpty())
051                criteria.addIn(CabPropertyConstants.Entry.FINANCIAL_BALANCE_TYPE_CODE, batchParameters.getIncludedFinancialBalanceTypeCodes());
052            
053            if (!batchParameters.getIncludedFinancialObjectSubTypeCodes().isEmpty())
054                criteria.addIn(CabPropertyConstants.Entry.FINANCIAL_OBJECT_FINANCIAL_OBJECT_SUB_TYPE_CODE, batchParameters.getIncludedFinancialObjectSubTypeCodes());
055            
056            if (!batchParameters.getExcludedFiscalPeriods().isEmpty())
057                criteria.addNotIn(CabPropertyConstants.Entry.UNIVERSITY_FISCAL_PERIOD_CODE, batchParameters.getExcludedFiscalPeriods());
058            
059            if (!batchParameters.getExcludedDocTypeCodes().isEmpty())
060                criteria.addNotIn(CabPropertyConstants.Entry.FINANCIAL_DOCUMENT_TYPE_CODE, batchParameters.getExcludedDocTypeCodes());
061            
062            QueryByCriteria query = new QueryByCriteria(Entry.class, criteria);
063            query.addOrderByAscending(CabPropertyConstants.Entry.DOCUMENT_NUMBER);
064            query.addOrderByAscending(CabPropertyConstants.Entry.TRANSACTION_DATE_TIME_STAMP);
065            return getPersistenceBrokerTemplate().getCollectionByQuery(query);
066        }
067    
068        /**
069         * @see org.kuali.kfs.module.cab.batch.dataaccess.ExtractDao#findPreTaggablePOAccounts(org.kuali.kfs.module.cab.businessobject.BatchParameters)
070         */
071        public Collection<PurchaseOrderAccount> findPreTaggablePOAccounts(BatchParameters batchParameters) {
072            Criteria statusCodeCond1 = new Criteria();
073            statusCodeCond1.addEqualTo(CabPropertyConstants.PreTagExtract.PURAP_CAPITAL_ASSET_SYSTEM_STATE_CODE, CabConstants.CAPITAL_ASSET_SYSTEM_STATE_CODE_NEW);
074            
075            Criteria statusCodeOrCond = new Criteria();
076            statusCodeOrCond.addIsNull(CabPropertyConstants.PreTagExtract.PURAP_CAPITAL_ASSET_SYSTEM_STATE_CODE);
077            statusCodeOrCond.addOrCriteria(statusCodeCond1);
078            
079            Criteria criteria = new Criteria();
080            Timestamp lastRunTimestamp = new Timestamp(((java.util.Date)batchParameters.getLastRunDate()).getTime());
081            criteria.addGreaterThan(CabPropertyConstants.PreTagExtract.PO_INITIAL_OPEN_TIMESTAMP, lastRunTimestamp);
082            criteria.addEqualTo(CabPropertyConstants.PreTagExtract.PO_STATUS_CODE, CabConstants.PO_STATUS_CODE_OPEN);
083            criteria.addAndCriteria(statusCodeOrCond);
084            criteria.addGreaterOrEqualThan(CabPropertyConstants.PreTagExtract.PURAP_ITEM_UNIT_PRICE, batchParameters.getCapitalizationLimitAmount());
085            
086            if (!batchParameters.getExcludedChartCodes().isEmpty())
087                criteria.addNotIn(CabPropertyConstants.PreTagExtract.CHART_OF_ACCOUNTS_CODE, batchParameters.getExcludedChartCodes());
088            
089            if (!batchParameters.getExcludedSubFundCodes().isEmpty())
090                criteria.addNotIn(CabPropertyConstants.PreTagExtract.ACCOUNT_SUB_FUND_GROUP_CODE, batchParameters.getExcludedSubFundCodes());
091            
092            if (!batchParameters.getIncludedFinancialObjectSubTypeCodes().isEmpty())
093                criteria.addIn(CabPropertyConstants.PreTagExtract.FINANCIAL_OBJECT_SUB_TYPE_CODE, batchParameters.getIncludedFinancialObjectSubTypeCodes());
094            
095            QueryByCriteria query = new QueryByCriteria(PurchaseOrderAccount.class, criteria);
096            return getPersistenceBrokerTemplate().getCollectionByQuery(query);
097        }
098    
099    
100        /**
101         * @see org.kuali.kfs.module.cab.batch.dataaccess.ExtractDao#findCreditMemoAccountHistory(org.kuali.kfs.module.cab.businessobject.BatchParameters)
102         */
103        public Collection<CreditMemoAccountRevision> findCreditMemoAccountRevisions(BatchParameters batchParameters) {
104            Criteria criteria = new Criteria();
105            criteria.addGreaterThan(CabPropertyConstants.CreditMemoAccountRevision.ACCOUNT_REVISION_TIMESTAMP, batchParameters.getLastRunTime());
106            
107            if (!batchParameters.getExcludedChartCodes().isEmpty())
108                criteria.addNotIn(CabPropertyConstants.CreditMemoAccountRevision.CHART_OF_ACCOUNTS_CODE, batchParameters.getExcludedChartCodes());
109            
110            if (!batchParameters.getExcludedSubFundCodes().isEmpty())
111                criteria.addNotIn(CabPropertyConstants.CreditMemoAccountRevision.ACCOUNT_SUB_FUND_GROUP_CODE, batchParameters.getExcludedSubFundCodes());
112            
113            if (!batchParameters.getIncludedFinancialObjectSubTypeCodes().isEmpty())
114                criteria.addIn(CabPropertyConstants.CreditMemoAccountRevision.FINANCIAL_OBJECT_FINANCIAL_OBJECT_SUB_TYPE_CODE, batchParameters.getIncludedFinancialObjectSubTypeCodes());
115            
116            QueryByCriteria query = new QueryByCriteria(CreditMemoAccountRevision.class, criteria);
117            query.addOrderByAscending(CabPropertyConstants.CreditMemoAccountRevision.ACCOUNT_REVISION_TIMESTAMP);
118            Collection<CreditMemoAccountRevision> historyRecs = getPersistenceBrokerTemplate().getCollectionByQuery(query);
119            return historyRecs;
120        }
121    
122        /**
123         * @see org.kuali.kfs.module.cab.batch.dataaccess.ExtractDao#findPaymentRequestAccountHistory(org.kuali.kfs.module.cab.businessobject.BatchParameters)
124         */
125        public Collection<PaymentRequestAccountRevision> findPaymentRequestAccountRevisions(BatchParameters batchParameters) {
126            Criteria criteria = new Criteria();
127            criteria.addGreaterThan(CabPropertyConstants.PaymentRequestAccountRevision.ACCOUNT_REVISION_TIMESTAMP, batchParameters.getLastRunTime());
128            
129            if (!batchParameters.getExcludedChartCodes().isEmpty())
130                criteria.addNotIn(CabPropertyConstants.PaymentRequestAccountRevision.CHART_OF_ACCOUNTS_CODE, batchParameters.getExcludedChartCodes());
131            
132            if (!batchParameters.getExcludedSubFundCodes().isEmpty())
133                criteria.addNotIn(CabPropertyConstants.PaymentRequestAccountRevision.ACCOUNT_SUB_FUND_GROUP_CODE, batchParameters.getExcludedSubFundCodes());
134            
135            if (!batchParameters.getIncludedFinancialObjectSubTypeCodes().isEmpty())
136                criteria.addIn(CabPropertyConstants.PaymentRequestAccountRevision.FINANCIAL_OBJECT_FINANCIAL_OBJECT_SUB_TYPE_CODE, batchParameters.getIncludedFinancialObjectSubTypeCodes());
137            
138            QueryByCriteria query = new QueryByCriteria(PaymentRequestAccountRevision.class, criteria);
139            query.addOrderByAscending(CabPropertyConstants.PaymentRequestAccountRevision.ACCOUNT_REVISION_TIMESTAMP);
140            Collection<PaymentRequestAccountRevision> historyRecs = getPersistenceBrokerTemplate().getCollectionByQuery(query);
141            return historyRecs;
142        }
143    }