/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.module.purap.document.dataaccess.impl; import java.sql.Date; import java.util.ArrayList; import java.util.Collection; import java.util.List; import org.apache.ojb.broker.query.Criteria; import org.apache.ojb.broker.query.QueryByCriteria; import org.apache.ojb.broker.query.ReportQueryByCriteria; import org.kuali.kfs.module.purap.PurapPropertyConstants; import org.kuali.kfs.module.purap.document.PaymentRequestDocument; import org.kuali.kfs.module.purap.document.VendorCreditMemoDocument; import org.kuali.kfs.module.purap.document.dataaccess.CreditMemoDao; import org.kuali.kfs.module.purap.util.VendorGroupingHelper; import org.kuali.kfs.sys.KFSPropertyConstants; import org.kuali.kfs.sys.util.TransactionalServiceUtils; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb; import org.springframework.transaction.annotation.Transactional; /** * OJB Implementation of CreditMemoDao. Provides persistence layer methods for the credit memo document. */ @Transactional public class CreditMemoDaoOjb extends PlatformAwareDaoBaseOjb implements CreditMemoDao { private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(CreditMemoDaoOjb.class); /** * @see org.kuali.kfs.module.purap.document.dataaccess.CreditMemoDao#getCreditMemosToExtract(java.lang.String) */ public List<VendorCreditMemoDocument> getCreditMemosToExtract(String chartCode) { LOG.debug("getCreditMemosToExtract() started"); Criteria criteria = new Criteria(); criteria.addEqualTo("processingCampusCode", chartCode); criteria.addIsNull("extractedTimestamp"); criteria.addEqualTo("holdIndicator", Boolean.FALSE); return (List<VendorCreditMemoDocument>)getPersistenceBrokerTemplate().getCollectionByQuery(new QueryByCriteria(VendorCreditMemoDocument.class, criteria)); } /** * @see org.kuali.kfs.module.purap.document.dataaccess.CreditMemoDao#getCreditMemosToExtractByVendor(java.lang.String, java.lang.Integer, java.lang.Integer) */ public Collection<VendorCreditMemoDocument> getCreditMemosToExtractByVendor(String chartCode, VendorGroupingHelper vendor ) { LOG.debug("getCreditMemosToExtractByVendor() started"); Criteria criteria = new Criteria(); criteria.addEqualTo( "processingCampusCode", chartCode ); criteria.addIsNull( "extractedTimestamp" ); criteria.addEqualTo( "holdIndicator", Boolean.FALSE ); criteria.addEqualTo( "vendorHeaderGeneratedIdentifier", vendor.getVendorHeaderGeneratedIdentifier() ); criteria.addEqualTo( "vendorDetailAssignedIdentifier", vendor.getVendorDetailAssignedIdentifier() ); criteria.addEqualTo( "vendorCountryCode", vendor.getVendorCountry() ); criteria.addLike( "vendorPostalCode", vendor.getVendorPostalCode() + "%" ); return getPersistenceBrokerTemplate().getCollectionByQuery(new QueryByCriteria(VendorCreditMemoDocument.class, criteria)); } /** * @see edu.iu.uis.pur.cm.dao.CreditMemoDao#duplicateExists(java.lang.String, java.lang.String) */ public boolean duplicateExists(Integer vendorNumberHeaderId, Integer vendorNumberDetailId, String creditMemoNumber) { LOG.debug("duplicateExists() started"); // criteria: vendorNumberHeader AND vendorNumberDetail AND creditMemoNumber Criteria criteria = new Criteria(); criteria.addEqualTo("vendorHeaderGeneratedIdentifier", vendorNumberHeaderId); criteria.addEqualTo("vendorDetailAssignedIdentifier", vendorNumberDetailId); criteria.addEqualTo("creditMemoNumber", creditMemoNumber); // use the criteria to do a Count against the DB, and return the resulting // number. Any positive non-zero result means that a potential duplicate // exists and we return true, otherwise, return false. int cmCount = getPersistenceBrokerTemplate().getCount(new QueryByCriteria(VendorCreditMemoDocument.class, criteria)); if (cmCount > 0) { return true; } else { return false; } } /** * @see edu.iu.uis.pur.cm.dao.CreditMemoDao#duplicateExists(java.lang.String, java.lang.String) */ public boolean duplicateExists(Integer vendorNumberHeaderId, Integer vendorNumberDetailId, Date date, KualiDecimal amount) { LOG.debug("duplicateExists() started"); // criteria: vendorNumberHeader AND vendorNumberDetail AND date AND amount Criteria criteria = new Criteria(); criteria.addEqualTo("vendorHeaderGeneratedIdentifier", vendorNumberHeaderId); criteria.addEqualTo("vendorDetailAssignedIdentifier", vendorNumberDetailId); criteria.addEqualTo("creditMemoDate", date); criteria.addEqualTo("creditMemoAmount", amount); // use the criteria to do a Count against the DB, and return the resulting // number. Any positive non-zero result means that a potential duplicate // exists and we return true, otherwise, return false. int cmCount = getPersistenceBrokerTemplate().getCount(new QueryByCriteria(VendorCreditMemoDocument.class, criteria)); if (cmCount > 0) { return true; } else { return false; } } /** * @see org.kuali.kfs.module.purap.document.dataaccess.CreditMemoDao#getDocumentNumberByCreditMemoId(java.lang.Integer) */ public String getDocumentNumberByCreditMemoId(Integer id) { Criteria criteria = new Criteria(); criteria.addEqualTo(PurapPropertyConstants.PURAP_DOC_ID, id); return getDocumentNumberOfCreditMemoByCriteria(criteria); } /** * Retrieves a document number for a credit memo by user defined criteria. * * @param criteria - holds field and value pairs defined by the calling method * @return - document number */ protected String getDocumentNumberOfCreditMemoByCriteria(Criteria criteria) { LOG.debug("getDocumentNumberOfCreditMemoByCriteria() started"); // Iterator<Object[]> iter = getDocumentNumbersOfCreditMemoByCriteria(criteria, false); List<String> returnList = getDocumentNumbersOfCreditMemoByCriteria(criteria, false); if (returnList.isEmpty()) { return null; } if (returnList.size() > 1) { String errorMsg = "Expected single document number for given criteria but multiple (at least 2) were returned"; LOG.error(errorMsg); throw new RuntimeException(); } else { return returnList.get(0); } } /** * Retrieves a document number for a credit memo by user defined criteria and sorts the values ascending if orderByAscending * parameter is true, descending otherwise. * * @param criteria - list of criteria to use in the retrieve * @param orderByAscending - boolean indicating results should be sorted ascending, descending otherwise * @return - Iterator of document numbers */ protected List<String> getDocumentNumbersOfCreditMemoByCriteria(Criteria criteria, boolean orderByAscending) { LOG.debug("getDocumentNumberOfCreditMemoByCriteria() started"); ReportQueryByCriteria rqbc = new ReportQueryByCriteria(VendorCreditMemoDocument.class, criteria); if (orderByAscending) { rqbc.addOrderByAscending(KFSPropertyConstants.DOCUMENT_NUMBER); } else { rqbc.addOrderByDescending(KFSPropertyConstants.DOCUMENT_NUMBER); } List<VendorCreditMemoDocument> vcmds = (List<VendorCreditMemoDocument>) getPersistenceBrokerTemplate().getCollectionByQuery(rqbc); List<String> returnList = new ArrayList<String>(); for (VendorCreditMemoDocument vcmd : vcmds) { returnList.add(vcmd.getDocumentNumber()); } return returnList; } public List<String> getActiveCreditMemoDocumentNumbersForPurchaseOrder(Integer purchaseOrderId){ LOG.debug("getActiveCreditmemoDocumentNumbersForPurchaseOrder() started"); List<String> returnList = new ArrayList<String>(); Criteria criteria = new Criteria(); criteria.addEqualTo(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, purchaseOrderId); //criteria.addIn(PurapPropertyConstants.STATUS_CODE, Arrays.asList(CreditMemoStatuses.STATUSES_POTENTIALLY_ACTIVE)); QueryByCriteria qbc = new QueryByCriteria(PaymentRequestDocument.class, criteria); returnList = getDocumentNumbersOfCreditMemoByCriteria(criteria, false); return returnList; } }