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 }