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.ar.dataaccess.impl;
017    
018    import java.math.BigDecimal;
019    import java.util.Iterator;
020    
021    import org.apache.ojb.broker.query.Criteria;
022    import org.apache.ojb.broker.query.QueryByCriteria;
023    import org.apache.ojb.broker.query.QueryFactory;
024    import org.apache.ojb.broker.query.ReportQueryByCriteria;
025    import org.kuali.kfs.module.ar.businessobject.Lockbox;
026    import org.kuali.kfs.module.ar.dataaccess.LockboxDao;
027    import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb;
028    import org.kuali.rice.kns.util.TransactionalServiceUtils;
029    
030    public class LockboxDaoOjb extends PlatformAwareDaoBaseOjb implements LockboxDao {
031    
032        private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(LockboxDaoOjb.class);
033    
034        /**
035         * @see org.kuali.module.ar.dao.OrganizationOptionsDao#getByPrimaryId(java.lang.String, java.lang.String)
036         */
037        public Lockbox getByPrimaryId(Long invoiceSequenceNumber) {
038            LOG.debug("getByPrimaryId() started"); 
039    
040            Criteria criteria = new Criteria();
041            criteria.addEqualTo("invoiceSequenceNumber", invoiceSequenceNumber);
042    
043            QueryByCriteria query = new QueryByCriteria(Lockbox.class, criteria);
044            query.addOrderByAscending("processedInvoiceDate");
045            query.addOrderByAscending("batchSequenceNumber");
046            
047            return (Lockbox) getPersistenceBrokerTemplate().getObjectByQuery(query);
048        }
049    
050        public Iterator<Lockbox> getByLockboxNumber(String lockboxNumber) {
051            LOG.debug("getbyLockboxNumber() started");
052            
053            Criteria criteria = new Criteria();
054            criteria.addEqualTo("lockboxNumber", lockboxNumber);
055            
056            QueryByCriteria query = new QueryByCriteria(Lockbox.class, criteria);
057            query.addOrderByAscending("processedInvoiceDate");
058            query.addOrderByAscending("batchSequenceNumber");
059            
060            return (Iterator<Lockbox>)getPersistenceBrokerTemplate().getIteratorByQuery(query);
061        }
062        
063        public Iterator<Lockbox> getAllLockboxes() {
064            LOG.debug("getAllLockboxes() started");
065            Criteria criteria = new Criteria();
066            QueryByCriteria query = new QueryByCriteria(Lockbox.class, criteria);
067            query.addOrderByAscending("processedInvoiceDate");
068            query.addOrderByAscending("batchSequenceNumber");
069            
070            return (Iterator<Lockbox>)getPersistenceBrokerTemplate().getIteratorByQuery(query);
071            
072        }
073    
074        public Long getMaxLockboxSequenceNumber() {
075            Criteria crit = new Criteria();
076            ReportQueryByCriteria reportQuery = QueryFactory.newReportQuery(Lockbox.class, crit);
077            reportQuery.setAttributes(new String[] { "MAX(AR_INV_SEQ_NBR)" });
078    
079            Iterator<?> iter = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(reportQuery);
080            if (iter.hasNext()) {
081                Object[] data = (Object[]) TransactionalServiceUtils.retrieveFirstAndExhaustIterator(iter);
082                BigDecimal max = (BigDecimal) data[0]; // Don't know why OJB returns a BigDecimal, but it does
083    
084                if (max == null) {
085                    return new Long(0);
086                }
087                else {
088                    return new Long(max.longValue());
089                }
090            }
091            else {
092                return new Long(0);
093            }
094        }
095        
096    }