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.purap.document.dataaccess.impl; 017 018 import java.sql.Date; 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.Query; 025 import org.apache.ojb.broker.query.QueryByCriteria; 026 import org.apache.ojb.broker.query.ReportQueryByCriteria; 027 import org.kuali.kfs.module.purap.PurapConstants; 028 import org.kuali.kfs.module.purap.PurapPropertyConstants; 029 import org.kuali.kfs.module.purap.document.CorrectionReceivingDocument; 030 import org.kuali.kfs.module.purap.document.LineItemReceivingDocument; 031 import org.kuali.kfs.module.purap.document.PaymentRequestDocument; 032 import org.kuali.kfs.module.purap.document.dataaccess.ReceivingDao; 033 import org.kuali.kfs.sys.KFSPropertyConstants; 034 import org.kuali.kfs.sys.context.SpringContext; 035 import org.kuali.rice.kew.exception.WorkflowException; 036 import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb; 037 import org.kuali.rice.kns.exception.InfrastructureException; 038 import org.kuali.rice.kns.service.DocumentService; 039 040 /** 041 * OJB implementation of PurchaseOrderDao. 042 */ 043 public class ReceivingDaoOjb extends PlatformAwareDaoBaseOjb implements ReceivingDao { 044 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ReceivingDaoOjb.class); 045 046 public List<String> getDocumentNumbersByPurchaseOrderId(Integer id) { 047 048 List<String> returnList = new ArrayList<String>(); 049 Criteria criteria = new Criteria(); 050 criteria.addEqualTo(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, id); 051 Iterator<Object[]> iter = getDocumentNumbersOfReceivingLineByCriteria(criteria, false); 052 while (iter.hasNext()) { 053 Object[] cols = (Object[]) iter.next(); 054 returnList.add((String) cols[0]); 055 } 056 return returnList; 057 058 } 059 060 public List<String> getCorrectionReceivingDocumentNumbersByPurchaseOrderId(Integer id) { 061 062 List<String> returnList = new ArrayList<String>(); 063 Criteria criteria = new Criteria(); 064 criteria.addEqualTo("lineItemReceivingDocument.purchaseOrderIdentifier", id); 065 Iterator<Object[]> iter = getDocumentNumbersOfCorrectionReceivingByCriteria(criteria, false); 066 while (iter.hasNext()) { 067 Object[] cols = (Object[]) iter.next(); 068 returnList.add((String) cols[0]); 069 } 070 return returnList; 071 072 } 073 074 public List<String> getCorrectionReceivingDocumentNumbersByReceivingLineNumber(String receivingDocumentNumber) { 075 076 List<String> returnList = new ArrayList<String>(); 077 Criteria criteria = new Criteria(); 078 criteria.addEqualTo(PurapPropertyConstants.LINE_ITEM_RECEIVING_DOCUMENT_NUMBER, receivingDocumentNumber); 079 Iterator<Object[]> iter = getDocumentNumbersOfCorrectionReceivingByCriteria(criteria, false); 080 while (iter.hasNext()) { 081 Object[] cols = (Object[]) iter.next(); 082 returnList.add((String) cols[0]); 083 } 084 return returnList; 085 086 } 087 088 /** 089 * Retrieves a document number for a payment request by user defined criteria and sorts the values ascending if orderByAscending 090 * parameter is true, descending otherwise. 091 * 092 * @param criteria - list of criteria to use in the retrieve 093 * @param orderByAscending - boolean to sort results ascending if true, descending otherwise 094 * @return - Iterator of document numbers 095 */ 096 protected Iterator<Object[]> getDocumentNumbersOfReceivingLineByCriteria(Criteria criteria, boolean orderByAscending) { 097 098 ReportQueryByCriteria rqbc = new ReportQueryByCriteria(LineItemReceivingDocument.class, criteria); 099 rqbc.setAttributes(new String[] { KFSPropertyConstants.DOCUMENT_NUMBER }); 100 if (orderByAscending) { 101 rqbc.addOrderByAscending(KFSPropertyConstants.DOCUMENT_NUMBER); 102 } 103 else { 104 rqbc.addOrderByDescending(KFSPropertyConstants.DOCUMENT_NUMBER); 105 } 106 return getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(rqbc); 107 } 108 109 protected Iterator<Object[]> getDocumentNumbersOfCorrectionReceivingByCriteria(Criteria criteria, boolean orderByAscending) { 110 111 ReportQueryByCriteria rqbc = new ReportQueryByCriteria(CorrectionReceivingDocument.class, criteria); 112 rqbc.setAttributes(new String[] { KFSPropertyConstants.DOCUMENT_NUMBER }); 113 if (orderByAscending) { 114 rqbc.addOrderByAscending(KFSPropertyConstants.DOCUMENT_NUMBER); 115 } 116 else { 117 rqbc.addOrderByDescending(KFSPropertyConstants.DOCUMENT_NUMBER); 118 } 119 return getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(rqbc); 120 } 121 122 public List<String> duplicateBillOfLadingNumber(Integer poId, String billOfLadingNumber) { 123 124 List<String> returnList = new ArrayList<String>(); 125 Criteria criteria = new Criteria(); 126 criteria.addEqualTo(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, poId); 127 criteria.addEqualTo(PurapPropertyConstants.SHIPMENT_BILL_OF_LADING_NUMBER, billOfLadingNumber); 128 Iterator<Object[]> iter = getDocumentNumbersOfReceivingLineByCriteria(criteria, false); 129 130 while (iter.hasNext()) { 131 Object[] cols = (Object[]) iter.next(); 132 returnList.add((String) cols[0]); 133 } 134 135 return returnList; 136 } 137 138 public List<String> duplicatePackingSlipNumber(Integer poId, String packingSlipNumber) { 139 140 List<String> returnList = new ArrayList<String>(); 141 Criteria criteria = new Criteria(); 142 criteria.addEqualTo(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, poId); 143 criteria.addEqualTo(PurapPropertyConstants.SHIPMENT_PACKING_SLIP_NUMBER, packingSlipNumber); 144 Iterator<Object[]> iter = getDocumentNumbersOfReceivingLineByCriteria(criteria, false); 145 146 while (iter.hasNext()) { 147 Object[] cols = (Object[]) iter.next(); 148 returnList.add((String) cols[0]); 149 } 150 151 return returnList; 152 } 153 154 public List<String> duplicateVendorDate(Integer poId, Date vendorDate) { 155 156 List<String> returnList = new ArrayList<String>(); 157 Criteria criteria = new Criteria(); 158 criteria.addEqualTo(PurapPropertyConstants.PURCHASE_ORDER_IDENTIFIER, poId); 159 criteria.addEqualTo(PurapPropertyConstants.SHIPMENT_RECEIVED_DATE, vendorDate); 160 Iterator<Object[]> iter = getDocumentNumbersOfReceivingLineByCriteria(criteria, false); 161 162 while (iter.hasNext()) { 163 Object[] cols = (Object[]) iter.next(); 164 returnList.add((String) cols[0]); 165 } 166 167 return returnList; 168 } 169 170 public List<LineItemReceivingDocument> getReceivingDocumentsForPOAmendment() { 171 172 Criteria criteria = new Criteria(); 173 criteria.addEqualTo("lineItemReceivingStatusCode", PurapConstants.LineItemReceivingStatuses.AWAITING_PO_OPEN_STATUS); 174 175 Query query = new QueryByCriteria(LineItemReceivingDocument.class, criteria); 176 Iterator<LineItemReceivingDocument> documents = (Iterator<LineItemReceivingDocument>) getPersistenceBrokerTemplate().getIteratorByQuery(query); 177 ArrayList<String> documentHeaderIds = new ArrayList<String>(); 178 while (documents.hasNext()) { 179 LineItemReceivingDocument document = (LineItemReceivingDocument) documents.next(); 180 documentHeaderIds.add(document.getDocumentNumber()); 181 } 182 183 if (documentHeaderIds.size() > 0) { 184 try { 185 return SpringContext.getBean(DocumentService.class).getDocumentsByListOfDocumentHeaderIds(LineItemReceivingDocument.class, documentHeaderIds); 186 } 187 catch (WorkflowException e) { 188 throw new InfrastructureException("unable to retrieve LineItemReceivingDocuments", e); 189 } 190 } 191 else { 192 return null; 193 } 194 195 } 196 197 }