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.pdp.dataaccess.impl;
017
018 import java.math.BigDecimal;
019 import java.util.ArrayList;
020 import java.util.Iterator;
021 import java.util.List;
022
023 import org.apache.ojb.broker.query.Criteria;
024 import org.apache.ojb.broker.query.QueryByCriteria;
025 import org.apache.ojb.broker.query.QueryFactory;
026 import org.apache.ojb.broker.query.ReportQueryByCriteria;
027 import org.kuali.kfs.pdp.PdpConstants;
028 import org.kuali.kfs.pdp.PdpPropertyConstants;
029 import org.kuali.kfs.pdp.businessobject.PaymentGroup;
030 import org.kuali.kfs.pdp.dataaccess.PaymentGroupDao;
031 import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb;
032
033 public class PaymentGroupDaoOjb extends PlatformAwareDaoBaseOjb implements PaymentGroupDao {
034 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PaymentGroupDaoOjb.class);
035
036
037 public PaymentGroupDaoOjb() {
038 super();
039 }
040
041 /**
042 * @see org.kuali.kfs.pdp.dataaccess.PaymentGroupDao#getDisbursementNumbersByDisbursementType(java.lang.Integer, java.lang.String)
043 */
044 public List<Integer> getDisbursementNumbersByDisbursementType(Integer pid,String disbursementType) {
045 LOG.debug("getDisbursementNumbersByDisbursementType() started");
046
047 List<Integer> results = new ArrayList<Integer>();
048
049 Criteria criteria = new Criteria();
050 criteria.addEqualTo(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_PROCESS_ID, pid);
051 criteria.addEqualTo(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_DISBURSEMENT_TYPE_CODE, disbursementType);
052
053 String[] fields = new String[] { PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_DISBURSEMENT_NBR };
054
055 ReportQueryByCriteria rq = QueryFactory.newReportQuery(PaymentGroup.class, fields, criteria, true);
056 rq.addOrderBy(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_DISBURSEMENT_NBR, true);
057
058 Iterator i = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(rq);
059 while ( i.hasNext() ) {
060 Object[] data = (Object[])i.next();
061 BigDecimal d = (BigDecimal)data[0];
062 results.add( new Integer(d.intValue()) );
063 }
064 return results;
065 }
066
067 /**
068 * @see org.kuali.kfs.pdp.dataaccess.PaymentGroupDao#getDisbursementNumbersByDisbursementType(java.lang.Integer, java.lang.String, java.lang.String)
069 */
070 public List<Integer> getDisbursementNumbersByDisbursementTypeAndBankCode(Integer pid, String disbursementType, String bankCode) {
071 if (LOG.isDebugEnabled()) {
072 LOG.debug("getDisbursementNumbersByDisbursementType() started");
073 }
074
075 List<Integer> results = new ArrayList<Integer>();
076
077 Criteria criteria = new Criteria();
078 criteria.addEqualTo(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_PROCESS_ID, pid);
079 criteria.addEqualTo(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_DISBURSEMENT_TYPE_CODE, disbursementType);
080 criteria.addEqualTo(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_BANK_CODE, bankCode);
081
082 String[] fields = new String[] { PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_DISBURSEMENT_NBR };
083
084 ReportQueryByCriteria rq = QueryFactory.newReportQuery(PaymentGroup.class, fields, criteria, true);
085 rq.addOrderBy(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_DISBURSEMENT_NBR, true);
086
087 Iterator i = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(rq);
088 while ( i.hasNext() ) {
089 Object[] data = (Object[])i.next();
090 BigDecimal d = (BigDecimal)data[0];
091 results.add( new Integer(d.intValue()) );
092 }
093 return results;
094 }
095
096 /**
097 * Given a process id and a disbursement type, finds a distinct list of bank codes used by payment groups within that payment process
098 * @param pid payment process to query payment groups of
099 * @param disbursementType the type of disbursements to query
100 * @return a sorted List of bank codes
101 */
102 public List<String> getDistinctBankCodesForProcessAndType(Integer pid, String disbursementType) {
103 List<String> results = new ArrayList<String>();
104
105 Criteria criteria = new Criteria();
106 criteria.addEqualTo(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_PROCESS_ID, pid);
107 criteria.addEqualTo(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_DISBURSEMENT_TYPE_CODE, disbursementType);
108
109 String[] fields = new String[] { PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_BANK_CODE };
110
111 ReportQueryByCriteria rq = QueryFactory.newReportQuery(PaymentGroup.class, fields, criteria, true);
112 rq.addOrderBy(PdpPropertyConstants.PaymentGroup.PAYMENT_GROUP_BANK_CODE, true);
113
114 Iterator iter = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(rq);
115 while (iter.hasNext()) {
116 final Object[] row = (Object[])iter.next();
117 final String bankCode = (String)row[0];
118
119 results.add(bankCode);
120 }
121
122 return results;
123 }
124
125 /**
126 * @see org.kuali.kfs.pdp.dataaccess.PaymentGroupDao#getAchPaymentsNeedingAdviceNotification()
127 */
128 public List<PaymentGroup> getAchPaymentsNeedingAdviceNotification() {
129 LOG.debug("getAchPaymentsNeedingAdviceNotification() started");
130
131 Criteria criteria = new Criteria();
132 criteria.addEqualTo(PdpPropertyConstants.PAYMENT_STATUS_CODE, PdpConstants.PaymentStatusCodes.EXTRACTED);
133 criteria.addEqualTo(PdpPropertyConstants.DISBURSEMENT_TYPE_CODE, PdpConstants.DisbursementTypeCodes.ACH);
134 criteria.addIsNull(PdpPropertyConstants.ADVICE_EMAIL_SENT_DATE);
135
136 return (List<PaymentGroup>) getPersistenceBrokerTemplate().getCollectionByQuery(new QueryByCriteria(PaymentGroup.class, criteria));
137 }
138
139 }
140