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.ld.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.ojb.broker.query.Criteria; 025 import org.apache.ojb.broker.query.Query; 026 import org.apache.ojb.broker.query.QueryFactory; 027 import org.apache.ojb.broker.query.ReportQueryByCriteria; 028 import org.kuali.kfs.gl.Constant; 029 import org.kuali.kfs.gl.OJBUtility; 030 import org.kuali.kfs.module.ld.LaborConstants; 031 import org.kuali.kfs.module.ld.businessobject.AccountStatusBaseFunds; 032 import org.kuali.kfs.module.ld.businessobject.EmployeeFunding; 033 import org.kuali.kfs.module.ld.businessobject.LaborCalculatedSalaryFoundationTracker; 034 import org.kuali.kfs.module.ld.dataaccess.LaborCalculatedSalaryFoundationTrackerDao; 035 import org.kuali.kfs.module.ld.util.ConsolidationUtil; 036 import org.kuali.kfs.sys.KFSPropertyConstants; 037 import org.kuali.kfs.sys.ObjectUtil; 038 import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb; 039 040 /** 041 * This is the data access object for calculated salary foundation tracker 042 * 043 * @see org.kuali.kfs.module.ld.businessobject.CalculatedSalaryFoundationTracker 044 */ 045 public class LaborCalculatedSalaryFoundationTrackerDaoOjb extends PlatformAwareDaoBaseOjb implements LaborCalculatedSalaryFoundationTrackerDao { 046 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(LaborCalculatedSalaryFoundationTrackerDaoOjb.class); 047 048 /** 049 * @see org.kuali.kfs.module.ld.dataaccess.LaborBaseFundsDao#findCSFTrackers(java.util.Map, boolean) 050 */ 051 public List<LaborCalculatedSalaryFoundationTracker> findCSFTrackers(Map fieldValues, boolean isConsolidated) { 052 LOG.info("Start findCSFTrackers()"); 053 054 List<LaborCalculatedSalaryFoundationTracker> csfTrackerCollection = new ArrayList<LaborCalculatedSalaryFoundationTracker>(); 055 if (isConsolidated) { 056 List<String> groupByList = getGroupByList(isConsolidated); 057 List<String> attributeList = getAttributeListForCSFTracker(isConsolidated, false); 058 059 Iterator<Object[]> queryResults = this.findConsolidatedCSFTrackerRawData(fieldValues, groupByList, attributeList); 060 061 while (queryResults != null && queryResults.hasNext()) { 062 csfTrackerCollection.add(this.marshalCSFTracker(queryResults.next())); 063 } 064 } 065 else { 066 csfTrackerCollection.addAll(findDetailedCSFTrackerRawData(fieldValues)); 067 } 068 return csfTrackerCollection; 069 } 070 071 /** 072 * @see org.kuali.kfs.module.ld.dataaccess.LaborBaseFundsDao#findCSFTrackersAsAccountStatusBaseFunds(java.util.Map, boolean) 073 */ 074 public List<AccountStatusBaseFunds> findCSFTrackersAsAccountStatusBaseFunds(Map fieldValues, boolean isConsolidated) { 075 LOG.info("Start findCSFTrackersAsAccountStatusBaseFunds()"); 076 077 List<String> groupByList = getGroupByList(isConsolidated); 078 List<String> attributeList = getAttributeListForCSFTracker(isConsolidated, false); 079 080 Iterator<Object[]> queryResults = this.findConsolidatedCSFTrackerRawData(fieldValues, groupByList, attributeList); 081 List<AccountStatusBaseFunds> baseFundsCollection = new ArrayList<AccountStatusBaseFunds>(); 082 while (queryResults != null && queryResults.hasNext()) { 083 baseFundsCollection.add(this.marshalCSFTrackerAsAccountStatusBaseFunds(queryResults.next())); 084 } 085 return baseFundsCollection; 086 } 087 088 /** 089 * @see org.kuali.kfs.module.ld.dataaccess.LaborCalculatedSalaryFoundationTrackerDao#findCSFTrackersAsEmployeeFunding(java.util.Map, 090 * boolean) 091 */ 092 public List<EmployeeFunding> findCSFTrackersAsEmployeeFunding(Map fieldValues, boolean isConsolidated) { 093 LOG.info("Start findCSFTrackersAsEmployeeFunding()"); 094 095 List<LaborCalculatedSalaryFoundationTracker> csfTrackerCollection = findCSFTrackers(fieldValues, isConsolidated); 096 List<EmployeeFunding> employeeFundingCollection = new ArrayList<EmployeeFunding>(); 097 for (LaborCalculatedSalaryFoundationTracker csfTracker : csfTrackerCollection) { 098 EmployeeFunding employeeFunding = new EmployeeFunding(); 099 ObjectUtil.buildObject(employeeFunding, csfTracker); 100 employeeFundingCollection.add(employeeFunding); 101 } 102 return employeeFundingCollection; 103 } 104 105 // get the Consolidated CSF trackers according to the given criteria 106 protected Iterator<Object[]> findConsolidatedCSFTrackerRawData(Map fieldValues, List<String> groupByList, List<String> attributeList) { 107 108 Criteria tempCriteria1 = new Criteria(); 109 tempCriteria1.addEqualTo(KFSPropertyConstants.CSF_DELETE_CODE, LaborConstants.DASHES_DELETE_CODE); 110 111 Criteria tempCriteria2 = new Criteria(); 112 tempCriteria2.addIsNull(KFSPropertyConstants.CSF_DELETE_CODE); 113 114 /* KFSPropertyConstants.CSF_DELETE_CODE = "-" OR is null */ 115 tempCriteria2.addOrCriteria(tempCriteria1); 116 117 Criteria criteria = OJBUtility.buildCriteriaFromMap(fieldValues, new LaborCalculatedSalaryFoundationTracker()); 118 criteria.addAndCriteria(tempCriteria2); 119 120 ReportQueryByCriteria query = QueryFactory.newReportQuery(LaborCalculatedSalaryFoundationTracker.class, criteria); 121 122 String[] groupBy = (String[]) groupByList.toArray(new String[groupByList.size()]); 123 query.addGroupBy(groupBy); 124 125 String[] attributes = (String[]) attributeList.toArray(new String[attributeList.size()]); 126 query.setAttributes(attributes); 127 128 return getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query); 129 } 130 131 // get the detailed CSF trackers according to the given criteria 132 protected Collection<LaborCalculatedSalaryFoundationTracker> findDetailedCSFTrackerRawData(Map fieldValues) { 133 134 Criteria tempCriteria1 = new Criteria(); 135 tempCriteria1.addEqualTo(KFSPropertyConstants.CSF_DELETE_CODE, LaborConstants.DASHES_DELETE_CODE); 136 137 Criteria tempCriteria2 = new Criteria(); 138 tempCriteria2.addIsNull(KFSPropertyConstants.CSF_DELETE_CODE); 139 140 /* KFSPropertyConstants.CSF_DELETE_CODE = "-" OR is null */ 141 tempCriteria2.addOrCriteria(tempCriteria1); 142 143 Criteria criteria = OJBUtility.buildCriteriaFromMap(fieldValues, new LaborCalculatedSalaryFoundationTracker()); 144 criteria.addAndCriteria(tempCriteria2); 145 146 Query query = QueryFactory.newQuery(LaborCalculatedSalaryFoundationTracker.class, criteria); 147 return getPersistenceBrokerTemplate().getCollectionByQuery(query); 148 } 149 150 // marshal into CalculatedSalaryFoundationTracker from the query result 151 protected LaborCalculatedSalaryFoundationTracker marshalCSFTracker(Object[] queryResult) { 152 LaborCalculatedSalaryFoundationTracker CSFTracker = new LaborCalculatedSalaryFoundationTracker(); 153 List<String> keyFields = this.getAttributeListForCSFTracker(false, true); 154 155 ObjectUtil.buildObject(CSFTracker, queryResult, keyFields); 156 return CSFTracker; 157 } 158 159 // marshal into AccountStatusBaseFunds from the query results 160 protected AccountStatusBaseFunds marshalCSFTrackerAsAccountStatusBaseFunds(Object[] queryResult) { 161 AccountStatusBaseFunds baseFunds = new AccountStatusBaseFunds(); 162 List<String> keyFields = this.getAttributeListForCSFTracker(false, true); 163 164 ObjectUtil.buildObject(baseFunds, queryResult, keyFields); 165 return baseFunds; 166 } 167 168 // marshal into EmployeeFunding from the query results 169 protected EmployeeFunding marshalCSFTrackerAsEmployeeFunding(Object[] queryResult) { 170 EmployeeFunding employeeFunding = new EmployeeFunding(); 171 List<String> keyFields = this.getAttributeListForCSFTracker(false, true); 172 173 ObjectUtil.buildObject(employeeFunding, queryResult, keyFields); 174 return employeeFunding; 175 } 176 177 // define a list of attributes that are used as the grouping criteria 178 protected List<String> getGroupByList(boolean isConsolidated) { 179 List<String> groupByList = new ArrayList<String>(); 180 groupByList.add(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR); 181 groupByList.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE); 182 groupByList.add(KFSPropertyConstants.ACCOUNT_NUMBER); 183 groupByList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE); 184 185 if (!isConsolidated) { 186 groupByList.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER); 187 groupByList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE); 188 } 189 return groupByList; 190 } 191 192 // define the return attribute list 193 protected List<String> getAttributeList(boolean isConsolidated) { 194 List<String> attributeList = getGroupByList(isConsolidated); 195 196 if (isConsolidated) { 197 attributeList.add("'" + Constant.CONSOLIDATED_SUB_ACCOUNT_NUMBER + "'"); 198 attributeList.add("'" + Constant.CONSOLIDATED_SUB_OBJECT_CODE + "'"); 199 } 200 return attributeList; 201 } 202 203 // define the return attribute list for CSF traker query 204 protected List<String> getAttributeListForCSFTracker(boolean isConsolidated, boolean isAttributeNameNeeded) { 205 List<String> attributeList = getAttributeList(isConsolidated); 206 207 if (!isAttributeNameNeeded) { 208 attributeList.add(ConsolidationUtil.sum(KFSPropertyConstants.CSF_FULL_TIME_EMPLOYMENT_QUANTITY)); 209 attributeList.add(ConsolidationUtil.sum(KFSPropertyConstants.CSF_AMOUNT)); 210 } 211 else { 212 attributeList.add(KFSPropertyConstants.CSF_FULL_TIME_EMPLOYMENT_QUANTITY); 213 attributeList.add(KFSPropertyConstants.CSF_AMOUNT); 214 } 215 return attributeList; 216 } 217 }