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 }