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.Iterator; 020 import java.util.List; 021 import java.util.Map; 022 023 import org.apache.ojb.broker.query.Criteria; 024 import org.apache.ojb.broker.query.QueryFactory; 025 import org.apache.ojb.broker.query.ReportQueryByCriteria; 026 import org.kuali.kfs.gl.Constant; 027 import org.kuali.kfs.gl.OJBUtility; 028 import org.kuali.kfs.module.ld.businessobject.AccountStatusBaseFunds; 029 import org.kuali.kfs.module.ld.dataaccess.LaborBaseFundsDao; 030 import org.kuali.kfs.module.ld.util.ConsolidationUtil; 031 import org.kuali.kfs.sys.KFSConstants; 032 import org.kuali.kfs.sys.KFSPropertyConstants; 033 import org.kuali.kfs.sys.ObjectUtil; 034 import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb; 035 036 /** 037 * This is the data access object for account status base funds. 038 * 039 * @see org.kuali.kfs.module.ld.businessobject.AccountStatusBaseFunds 040 */ 041 public class LaborBaseFundsDaoOjb extends PlatformAwareDaoBaseOjb implements LaborBaseFundsDao { 042 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(LaborBaseFundsDaoOjb.class); 043 044 /** 045 * @see org.kuali.kfs.module.ld.dataaccess.LaborBaseFundsDao#findLaborBaseFunds(java.util.Map, boolean) 046 */ 047 public List<AccountStatusBaseFunds> findLaborBaseFunds(Map fieldValues, boolean isConsolidated) { 048 LOG.debug("Start findLaborBaseFunds()"); 049 050 Iterator<Object[]> queryResults = this.findLaborBaseFundsRawData(fieldValues, isConsolidated); 051 List<AccountStatusBaseFunds> BaseFundsCollection = new ArrayList<AccountStatusBaseFunds>(); 052 while (queryResults != null && queryResults.hasNext()) { 053 BaseFundsCollection.add(this.marshalAccountStatusBaseFunds(queryResults.next())); 054 } 055 return BaseFundsCollection; 056 } 057 058 // get the labor base funds according to the given criteria 059 protected Iterator<Object[]> findLaborBaseFundsRawData(Map fieldValues, boolean isConsolidated) { 060 Criteria criteria = OJBUtility.buildCriteriaFromMap(fieldValues, new AccountStatusBaseFunds()); 061 criteria.addEqualTo(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE, KFSConstants.BALANCE_TYPE_BASE_BUDGET); 062 063 criteria.addEqualToField(KFSPropertyConstants.LABOR_OBJECT + "." + KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR); 064 criteria.addEqualToField(KFSPropertyConstants.LABOR_OBJECT + "." + KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE); 065 criteria.addEqualToField(KFSPropertyConstants.LABOR_OBJECT + "." + KFSPropertyConstants.FINANCIAL_OBJECT_CODE, KFSPropertyConstants.FINANCIAL_OBJECT_CODE); 066 067 // this statement is used to force OJB to join LABOR_OBJECT and GL_BALANCE tables 068 criteria.addNotNull(KFSPropertyConstants.LABOR_OBJECT + "." + KFSPropertyConstants.FINANCIAL_OBJECT_FRINGE_OR_SALARY_CODE); 069 070 ReportQueryByCriteria query = QueryFactory.newReportQuery(AccountStatusBaseFunds.class, criteria); 071 072 List<String> groupByList = getGroupByList(isConsolidated); 073 String[] groupBy = (String[]) groupByList.toArray(new String[groupByList.size()]); 074 query.addGroupBy(groupBy); 075 076 List<String> getAttributeList = getAttributeListForBaseFunds(isConsolidated, false); 077 String[] attributes = (String[]) getAttributeList.toArray(new String[getAttributeList.size()]); 078 query.setAttributes(attributes); 079 080 return getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query); 081 } 082 083 // marshal into AccountStatusBaseFunds from the query result 084 protected AccountStatusBaseFunds marshalAccountStatusBaseFunds(Object[] queryResult) { 085 AccountStatusBaseFunds baseFunds = new AccountStatusBaseFunds(); 086 List<String> keyFields = this.getAttributeListForBaseFunds(false, true); 087 088 ObjectUtil.buildObject(baseFunds, queryResult, keyFields); 089 return baseFunds; 090 } 091 092 // define a list of attributes that are used as the grouping criteria 093 protected List<String> getGroupByList(boolean isConsolidated) { 094 List<String> groupByList = new ArrayList<String>(); 095 groupByList.add(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR); 096 groupByList.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE); 097 groupByList.add(KFSPropertyConstants.ACCOUNT_NUMBER); 098 groupByList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE); 099 100 if (!isConsolidated) { 101 groupByList.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER); 102 groupByList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE); 103 } 104 return groupByList; 105 } 106 107 // define the return attribute list 108 protected List<String> getAttributeList(boolean isConsolidated) { 109 List<String> attributeList = getGroupByList(isConsolidated); 110 111 if (isConsolidated) { 112 attributeList.add("'" + Constant.CONSOLIDATED_SUB_ACCOUNT_NUMBER + "'"); 113 attributeList.add("'" + Constant.CONSOLIDATED_SUB_OBJECT_CODE + "'"); 114 } 115 return attributeList; 116 } 117 118 // define the return attribute list for base funds query 119 protected List<String> getAttributeListForBaseFunds(boolean isConsolidated, boolean isAttributeNameNeeded) { 120 List<String> attributeList = getAttributeList(isConsolidated); 121 122 if (!isAttributeNameNeeded) { 123 attributeList.add(ConsolidationUtil.sum(KFSPropertyConstants.ACCOUNTING_LINE_ANNUAL_BALANCE_AMOUNT)); 124 attributeList.add(ConsolidationUtil.sum(KFSPropertyConstants.FINANCIAL_BEGINNING_BALANCE_LINE_AMOUNT)); 125 attributeList.add(ConsolidationUtil.sum(KFSPropertyConstants.CONTRACTS_GRANTS_BEGINNING_BALANCE_AMOUNT)); 126 } 127 else { 128 attributeList.add(KFSPropertyConstants.ACCOUNTING_LINE_ANNUAL_BALANCE_AMOUNT); 129 attributeList.add(KFSPropertyConstants.FINANCIAL_BEGINNING_BALANCE_LINE_AMOUNT); 130 attributeList.add(KFSPropertyConstants.CONTRACTS_GRANTS_BEGINNING_BALANCE_AMOUNT); 131 } 132 return attributeList; 133 } 134 }