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.cab.dataaccess.impl;
017
018 import java.util.ArrayList;
019 import java.util.Collection;
020 import java.util.Iterator;
021 import java.util.List;
022 import java.util.Map;
023
024 import org.apache.commons.lang.StringUtils;
025 import org.apache.ojb.broker.query.Criteria;
026 import org.apache.ojb.broker.query.QueryByCriteria;
027 import org.apache.ojb.broker.query.QueryFactory;
028 import org.apache.ojb.broker.query.ReportQueryByCriteria;
029 import org.kuali.kfs.gl.OJBUtility;
030 import org.kuali.kfs.module.cab.CabConstants;
031 import org.kuali.kfs.module.cab.CabPropertyConstants;
032 import org.kuali.kfs.module.cab.businessobject.GeneralLedgerEntry;
033 import org.kuali.kfs.module.cab.businessobject.PurchasingAccountsPayableDocument;
034 import org.kuali.kfs.module.cab.dataaccess.PurchasingAccountsPayableReportDao;
035 import org.kuali.kfs.sys.KFSConstants;
036 import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb;
037
038 public class PurchasingAccountsPayableReportDaoOjb extends PlatformAwareDaoBaseOjb implements PurchasingAccountsPayableReportDao {
039 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurchasingAccountsPayableReportDaoOjb.class);
040
041 /**
042 * @see org.kuali.kfs.module.cab.dataaccess.PurchasingAccountsPayableReportDao#findPurchasingAccountsPayableDocuments(java.util.Map)
043 */
044 public Collection findPurchasingAccountsPayableDocuments(Map fieldValues) {
045 Criteria criteria = OJBUtility.buildCriteriaFromMap(fieldValues, new PurchasingAccountsPayableDocument());
046 QueryByCriteria query = QueryFactory.newQuery(PurchasingAccountsPayableDocument.class, criteria);
047 OJBUtility.limitResultSize(query);
048
049 return getPersistenceBrokerTemplate().getCollectionByQuery(query);
050 }
051
052
053 /**
054 * @see org.kuali.kfs.module.cab.dataaccess.PurchasingAccountsPayableReportDao#findGeneralLedgers(java.util.Map)
055 */
056 public Iterator findGeneralLedgers(Map fieldValues) {
057 LOG.debug("findGeneralLedgers started...");
058 ReportQueryByCriteria query = getGeneralLedgerReportQuery(fieldValues);
059 OJBUtility.limitResultSize(query);
060 return getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query);
061 }
062
063 /**
064 * Generate Query object for GeneralLedgerEntry search.
065 *
066 * @param fieldValues
067 * @return
068 */
069 protected ReportQueryByCriteria getGeneralLedgerReportQuery(Map fieldValues) {
070 Collection docTypeCodes = getDocumentType(fieldValues);
071 Collection activityStatusCodes = getActivityStatusCode(fieldValues);
072
073 Criteria criteria = OJBUtility.buildCriteriaFromMap(fieldValues, new GeneralLedgerEntry());
074
075 // set document type code criteria
076 if (!docTypeCodes.isEmpty()) {
077 criteria.addIn(CabPropertyConstants.GeneralLedgerEntry.FINANCIAL_DOCUMENT_TYPE_CODE, docTypeCodes);
078 }
079 // set activity status code criteria
080 if (!activityStatusCodes.isEmpty()) {
081 criteria.addIn(CabPropertyConstants.GeneralLedgerEntry.ACTIVITY_STATUS_CODE, activityStatusCodes);
082 }
083 ReportQueryByCriteria query = QueryFactory.newReportQuery(GeneralLedgerEntry.class, criteria);
084
085 List attributeList = buildAttributeList(false);
086
087 // set the selection attributes
088 String[] attributes = (String[]) attributeList.toArray(new String[attributeList.size()]);
089 query.setAttributes(attributes);
090 return query;
091 }
092
093
094 /**
095 * Get activity_statu_code
096 *
097 * @param fieldValues
098 * @return
099 */
100 protected Collection getActivityStatusCode(Map fieldValues) {
101 Collection activityStatusCodes = new ArrayList<String>();
102
103 if (fieldValues.containsKey(CabPropertyConstants.GeneralLedgerEntry.ACTIVITY_STATUS_CODE)) {
104 String fieldValue = (String) fieldValues.get(CabPropertyConstants.GeneralLedgerEntry.ACTIVITY_STATUS_CODE);
105 if (KFSConstants.NON_ACTIVE_INDICATOR.equalsIgnoreCase(fieldValue)) {
106 // when selected as 'N', search for active lines as 'M'-modified by CAB user,'N'- new
107 activityStatusCodes.add(CabConstants.ActivityStatusCode.NEW);
108 activityStatusCodes.add(CabConstants.ActivityStatusCode.MODIFIED);
109 }
110 fieldValues.remove(CabPropertyConstants.GeneralLedgerEntry.ACTIVITY_STATUS_CODE);
111 }
112 return activityStatusCodes;
113 }
114
115
116 /**
117 * Get Document type code selection
118 *
119 * @param fieldValues
120 * @return
121 */
122 protected Collection getDocumentType(Map fieldValues) {
123 Collection docTypeCodes = new ArrayList<String>();
124
125 if (fieldValues.containsKey(CabPropertyConstants.GeneralLedgerEntry.FINANCIAL_DOCUMENT_TYPE_CODE)) {
126 String fieldValue = (String) fieldValues.get(CabPropertyConstants.GeneralLedgerEntry.FINANCIAL_DOCUMENT_TYPE_CODE);
127 if (StringUtils.isEmpty(fieldValue)) {
128 docTypeCodes.add(CabConstants.PREQ);
129 docTypeCodes.add(CabConstants.CM);
130 }
131 else {
132 docTypeCodes.add(fieldValue);
133 }
134 // truncate the non-property filed
135 fieldValues.remove(CabPropertyConstants.GeneralLedgerEntry.FINANCIAL_DOCUMENT_TYPE_CODE);
136 }
137
138 return docTypeCodes;
139 }
140
141
142 /**
143 * Build attribute list for select clause.
144 *
145 * @param isExtended
146 * @return
147 */
148 protected List<String> buildAttributeList(boolean isExtended) {
149 List attributeList = new ArrayList();
150
151 attributeList.add(CabPropertyConstants.GeneralLedgerEntry.UNIVERSITY_FISCAL_YEAR);
152 attributeList.add(CabPropertyConstants.GeneralLedgerEntry.UNIVERSITY_FISCAL_PERIOD_CODE);
153 attributeList.add(CabPropertyConstants.GeneralLedgerEntry.CHART_OF_ACCOUNTS_CODE);
154 attributeList.add(CabPropertyConstants.GeneralLedgerEntry.ACCOUNT_NUMBER);
155 attributeList.add(CabPropertyConstants.GeneralLedgerEntry.FINANCIAL_OBJECT_CODE);
156 attributeList.add(CabPropertyConstants.GeneralLedgerEntry.FINANCIAL_DOCUMENT_TYPE_CODE);
157 attributeList.add(CabPropertyConstants.GeneralLedgerEntry.DOCUMENT_NUMBER);
158 attributeList.add(CabPropertyConstants.GeneralLedgerEntry.TRANSACTION_DEBIT_CREDIT_CODE);
159 attributeList.add(CabPropertyConstants.GeneralLedgerEntry.TRANSACTION_LEDGER_ENTRY_AMOUNT);
160 attributeList.add(CabPropertyConstants.GeneralLedgerEntry.REFERENCE_FINANCIAL_DOCUMENT_NUMBER);
161 attributeList.add(CabPropertyConstants.GeneralLedgerEntry.TRANSACTION_DATE);
162 attributeList.add(CabPropertyConstants.GeneralLedgerEntry.TRANSACTION_LEDGER_SUBMIT_AMOUNT);
163 attributeList.add(CabPropertyConstants.GeneralLedgerEntry.ACTIVITY_STATUS_CODE);
164 return attributeList;
165 }
166
167 }