/*
* The Kuali Financial System, a comprehensive financial management system for higher education.
*
* Copyright 2005-2014 The Kuali Foundation
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU Affero General Public License as
* published by the Free Software Foundation, either version 3 of the
* License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*/
package org.kuali.kfs.module.ld.dataaccess.impl;
import static org.kuali.kfs.module.ld.LaborPropertyConstants.AccountingPeriodProperties.APRIL;
import static org.kuali.kfs.module.ld.LaborPropertyConstants.AccountingPeriodProperties.AUGUST;
import static org.kuali.kfs.module.ld.LaborPropertyConstants.AccountingPeriodProperties.DECEMBER;
import static org.kuali.kfs.module.ld.LaborPropertyConstants.AccountingPeriodProperties.FEBRUARY;
import static org.kuali.kfs.module.ld.LaborPropertyConstants.AccountingPeriodProperties.JANUARY;
import static org.kuali.kfs.module.ld.LaborPropertyConstants.AccountingPeriodProperties.JULY;
import static org.kuali.kfs.module.ld.LaborPropertyConstants.AccountingPeriodProperties.JUNE;
import static org.kuali.kfs.module.ld.LaborPropertyConstants.AccountingPeriodProperties.MARCH;
import static org.kuali.kfs.module.ld.LaborPropertyConstants.AccountingPeriodProperties.MAY;
import static org.kuali.kfs.module.ld.LaborPropertyConstants.AccountingPeriodProperties.NOVEMBER;
import static org.kuali.kfs.module.ld.LaborPropertyConstants.AccountingPeriodProperties.OCTOBER;
import static org.kuali.kfs.module.ld.LaborPropertyConstants.AccountingPeriodProperties.SEPTEMBER;
import static org.kuali.kfs.module.ld.LaborPropertyConstants.AccountingPeriodProperties.YEAR_END;
import static org.kuali.kfs.module.ld.util.ConsolidationUtil.buildConsolidatedQuery;
import static org.kuali.kfs.module.ld.util.ConsolidationUtil.buildGroupByCollection;
import static org.kuali.kfs.module.ld.util.ConsolidationUtil.sum;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import org.apache.commons.lang.StringUtils;
import org.apache.ojb.broker.query.Criteria;
import org.apache.ojb.broker.query.Query;
import org.apache.ojb.broker.query.QueryByCriteria;
import org.apache.ojb.broker.query.QueryFactory;
import org.apache.ojb.broker.query.ReportQueryByCriteria;
import org.kuali.kfs.gl.OJBUtility;
import org.kuali.kfs.gl.dataaccess.LedgerBalanceBalancingDao;
import org.kuali.kfs.module.ld.LaborConstants;
import org.kuali.kfs.module.ld.businessobject.EmployeeFunding;
import org.kuali.kfs.module.ld.businessobject.LaborBalanceSummary;
import org.kuali.kfs.module.ld.businessobject.LedgerBalance;
import org.kuali.kfs.module.ld.businessobject.LedgerBalanceForYearEndBalanceForward;
import org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao;
import org.kuali.kfs.module.ld.util.ConsolidationUtil;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.kfs.sys.KFSPropertyConstants;
import org.kuali.kfs.sys.ObjectUtil;
import org.kuali.rice.core.framework.persistence.ojb.dao.PlatformAwareDaoBaseOjb;
/**
* This is the data access object for ledger balance.
*
* @see org.kuali.kfs.module.ld.businessobject.LedgerBalance
*/
public class LaborLedgerBalanceDaoOjb extends PlatformAwareDaoBaseOjb implements LaborLedgerBalanceDao, LedgerBalanceBalancingDao {
private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(LaborLedgerBalanceDaoOjb.class);
/**
* @see org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao#findBalancesForFiscalYear(java.lang.Integer)
*/
public Iterator<LedgerBalance> findBalancesForFiscalYear(Integer year) {
LOG.debug("findBalancesForFiscalYear() started");
Criteria c = new Criteria();
c.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, year);
QueryByCriteria query = QueryFactory.newQuery(LedgerBalance.class, c);
query.addOrderByAscending(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
query.addOrderByAscending(KFSPropertyConstants.ACCOUNT_NUMBER);
query.addOrderByAscending(KFSPropertyConstants.SUB_ACCOUNT_NUMBER);
query.addOrderByAscending(KFSPropertyConstants.FINANCIAL_OBJECT_CODE);
query.addOrderByAscending(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE);
query.addOrderByAscending(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE);
query.addOrderByAscending(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE);
return getPersistenceBrokerTemplate().getIteratorByQuery(query);
}
/**
* @see org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao#findBalancesForFiscalYear(Integer, Map, List, List)
*/
public Iterator<LedgerBalance> findBalancesForFiscalYear(Integer fiscalYear, Map<String, String> fieldValues, List<String> encumbranceBalanceTypes) {
Criteria criteria = buildCriteriaFromMap(fieldValues, new LedgerBalance(), encumbranceBalanceTypes, false);
criteria.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, fiscalYear);
QueryByCriteria query = QueryFactory.newQuery(LedgerBalance.class, criteria);
query.addOrderByAscending(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
query.addOrderByAscending(KFSPropertyConstants.ACCOUNT_NUMBER);
query.addOrderByAscending(KFSPropertyConstants.SUB_ACCOUNT_NUMBER);
query.addOrderByAscending(KFSPropertyConstants.FINANCIAL_OBJECT_CODE);
query.addOrderByAscending(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE);
query.addOrderByAscending(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE);
query.addOrderByAscending(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE);
return getPersistenceBrokerTemplate().getIteratorByQuery(query);
}
/**
* @see org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao#findBalance(java.util.Map, boolean)
*/
public Iterator<LedgerBalance> findBalance(Map fieldValues, boolean isConsolidated, List<String> encumbranceBalanceTypes, boolean noZeroAmounts) {
LOG.debug("findBalance() started");
Query query = this.getBalanceQuery(fieldValues, isConsolidated, encumbranceBalanceTypes, noZeroAmounts);
OJBUtility.limitResultSize(query);
if (isConsolidated) {
return getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query);
}
return getPersistenceBrokerTemplate().getIteratorByQuery(query);
}
@Deprecated
public Iterator<LedgerBalance> findBalance(Map fieldValues, boolean isConsolidated, List<String> encumbranceBalanceTypes) {
LOG.debug("findBalance() started");
Query query = this.getBalanceQuery(fieldValues, isConsolidated, encumbranceBalanceTypes, false);
OJBUtility.limitResultSize(query);
if (isConsolidated) {
return getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query);
}
return getPersistenceBrokerTemplate().getIteratorByQuery(query);
}
/**
* @see org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao#getConsolidatedBalanceRecordCount(java.util.Map)
*/
public Iterator getConsolidatedBalanceRecordCount(Map fieldValues, List<String> encumbranceBalanceTypes, boolean noZeroAmounts) {
LOG.debug("getBalanceRecordCount() started");
ReportQueryByCriteria query = this.getBalanceCountQuery(fieldValues, encumbranceBalanceTypes, noZeroAmounts);
return getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query);
}
@Deprecated
public Iterator getConsolidatedBalanceRecordCount(Map fieldValues, List<String> encumbranceBalanceTypes) {
LOG.debug("getBalanceRecordCount() started");
ReportQueryByCriteria query = this.getBalanceCountQuery(fieldValues, encumbranceBalanceTypes, false);
return getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query);
}
// build the query for balance search
protected Query getBalanceQuery(Map fieldValues, boolean isConsolidated, List<String> encumbarnceBalanceTypes, boolean noZeroAmounts) {
if (LOG.isDebugEnabled()) {
LOG.debug("Building criteria from map fields: " + fieldValues.keySet());
LOG.debug("getBalanceQuery(Map, boolean) started");
}
Criteria criteria = buildCriteriaFromMap(fieldValues, new LedgerBalance(), encumbarnceBalanceTypes, noZeroAmounts);
ReportQueryByCriteria query = QueryFactory.newReportQuery(LedgerBalance.class, criteria);
// if consolidated, then ignore subaccount number and balance type code
if (isConsolidated) {
buildConsolidatedQuery(query, sum(JULY.propertyName), sum(AUGUST.propertyName), sum(SEPTEMBER.propertyName), sum(OCTOBER.propertyName), sum(NOVEMBER.propertyName), sum(DECEMBER.propertyName), sum(JANUARY.propertyName), sum(FEBRUARY.propertyName), sum(MARCH.propertyName), sum(APRIL.propertyName), sum(MAY.propertyName), sum(JUNE.propertyName), sum(YEAR_END.propertyName));
}
return query;
}
// build the query for balance search
protected ReportQueryByCriteria getBalanceCountQuery(Map fieldValues, List<String> encumbranceBalanceTypes, boolean noZeroAmounts) {
Criteria criteria = buildCriteriaFromMap(fieldValues, new LedgerBalance(), encumbranceBalanceTypes, noZeroAmounts);
ReportQueryByCriteria query = QueryFactory.newReportQuery(LedgerBalance.class, criteria);
// set the selection attributes
query.setAttributes(new String[] { "count(*)" });
Collection<String> groupByList = buildGroupByCollection();
groupByList.remove(KFSPropertyConstants.SUB_ACCOUNT_NUMBER);
groupByList.remove(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE);
groupByList.remove(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE);
// add the group criteria into the selection statement
String[] groupBy = (String[]) groupByList.toArray(new String[groupByList.size()]);
query.addGroupBy(groupBy);
return query;
}
/**
* This method builds the query criteria based on the input field map
*
* @param fieldValues
* @param balance
* @param encumbranceBalanceTypes
* @param noZeroAmounts makes sure at least one of the 13 monthly buckets has an amount not equals to zero
* @return a query criteria
*/
protected Criteria buildCriteriaFromMap(Map fieldValues, LedgerBalance balance, List<String> encumbranceBalanceTypes, boolean noZeroAmounts) {
Map localFieldValues = new HashMap();
localFieldValues.putAll(fieldValues);
Criteria criteria = new Criteria();
// handle encumbrance balance type
String propertyName = KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE;
if (localFieldValues.containsKey(propertyName)) {
String propertyValue = (String) localFieldValues.get(propertyName);
if (KFSConstants.AGGREGATE_ENCUMBRANCE_BALANCE_TYPE_CODE.equals(propertyValue)) {
localFieldValues.remove(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE);
criteria.addIn(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE, encumbranceBalanceTypes);
}
}
criteria.addAndCriteria(OJBUtility.buildCriteriaFromMap(localFieldValues, new LedgerBalance()));
if (noZeroAmounts) {
Criteria noZeroAmountsCriteria = new Criteria();
noZeroAmountsCriteria.addEqualTo(KFSPropertyConstants.MONTH1_AMOUNT, 0);
noZeroAmountsCriteria.addEqualTo(KFSPropertyConstants.MONTH2_AMOUNT, 0);
noZeroAmountsCriteria.addEqualTo(KFSPropertyConstants.MONTH3_AMOUNT, 0);
noZeroAmountsCriteria.addEqualTo(KFSPropertyConstants.MONTH4_AMOUNT, 0);
noZeroAmountsCriteria.addEqualTo(KFSPropertyConstants.MONTH5_AMOUNT, 0);
noZeroAmountsCriteria.addEqualTo(KFSPropertyConstants.MONTH6_AMOUNT, 0);
noZeroAmountsCriteria.addEqualTo(KFSPropertyConstants.MONTH7_AMOUNT, 0);
noZeroAmountsCriteria.addEqualTo(KFSPropertyConstants.MONTH8_AMOUNT, 0);
noZeroAmountsCriteria.addEqualTo(KFSPropertyConstants.MONTH9_AMOUNT, 0);
noZeroAmountsCriteria.addEqualTo(KFSPropertyConstants.MONTH10_AMOUNT, 0);
noZeroAmountsCriteria.addEqualTo(KFSPropertyConstants.MONTH11_AMOUNT, 0);
noZeroAmountsCriteria.addEqualTo(KFSPropertyConstants.MONTH12_AMOUNT, 0);
noZeroAmountsCriteria.addEqualTo(KFSPropertyConstants.MONTH13_AMOUNT, 0);
noZeroAmountsCriteria.setNegative(true);
criteria.addAndCriteria(noZeroAmountsCriteria);
}
return criteria;
}
/**
* @see org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao#findCurrentFunds(java.util.Map)
*/
public List<LedgerBalance> findCurrentFunds(Map fieldValues) {
LOG.debug("Start findCurrentFunds()");
Iterator<Object[]> queryResults = this.findCurrentFundsRawData(fieldValues);
List<LedgerBalance> currentFundsCollection = new ArrayList<LedgerBalance>();
while (queryResults != null && queryResults.hasNext()) {
currentFundsCollection.add(this.marshalFundsAsLedgerBalance(queryResults.next()));
}
return currentFundsCollection;
}
/**
* @see org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao#findEncumbranceFunds(java.util.Map)
*/
public List<LedgerBalance> findEncumbranceFunds(Map fieldValues) {
LOG.debug("Start findEncumbranceFunds()");
Iterator<Object[]> queryResults = this.findEncumbranceFundsRawData(fieldValues);
List<LedgerBalance> currentFundsCollection = new ArrayList<LedgerBalance>();
while (queryResults != null && queryResults.hasNext()) {
currentFundsCollection.add(this.marshalFundsAsLedgerBalance(queryResults.next()));
}
return currentFundsCollection;
}
/**
* @see org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao#findCurrentEmployeeFunds(java.util.Map)
*/
public List<EmployeeFunding> findCurrentEmployeeFunds(Map fieldValues) {
LOG.debug("Start findCurrentEmployeeFunds()");
Iterator<Object[]> queryResults = this.findCurrentFundsRawData(fieldValues);
List<EmployeeFunding> currentFundsCollection = new ArrayList<EmployeeFunding>();
while (queryResults != null && queryResults.hasNext()) {
currentFundsCollection.add(this.marshalFundsAsEmployeeFunding(queryResults.next()));
}
return currentFundsCollection;
}
/**
* @see org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao#findEncumbranceEmployeeFunds(java.util.Map)
*/
public List<EmployeeFunding> findEncumbranceEmployeeFunds(Map fieldValues) {
LOG.debug("Start findCurrentEmployeeFunds()");
Iterator<Object[]> queryResults = this.findEncumbranceFundsRawData(fieldValues);
List<EmployeeFunding> currentFundsCollection = new ArrayList<EmployeeFunding>();
while (queryResults != null && queryResults.hasNext()) {
currentFundsCollection.add(this.marshalFundsAsEmployeeFunding(queryResults.next()));
}
return currentFundsCollection;
}
/**
* @see org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao#findBalanceSummary(java.lang.Integer, java.util.Collection)
*/
public List<LaborBalanceSummary> findBalanceSummary(Integer fiscalYear, Collection<String> balanceTypes) {
LOG.debug("Start findBalanceSummary()");
Criteria criteria = new Criteria();
criteria.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, fiscalYear);
criteria.addIn(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE, balanceTypes);
Iterator<Object[]> queryResults = this.findBalanceSummaryRawData(criteria);
List<LaborBalanceSummary> balanceSummaryCollection = new ArrayList<LaborBalanceSummary>();
while (queryResults != null && queryResults.hasNext()) {
balanceSummaryCollection.add(this.marshalFundsAsLaborBalanceSummary(queryResults.next()));
}
return balanceSummaryCollection;
}
// get the current funds according to the given criteria
protected Iterator<Object[]> findCurrentFundsRawData(Map fieldValues) {
Criteria criteria = OJBUtility.buildCriteriaFromMap(fieldValues, new LedgerBalance());
criteria.addEqualTo(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE, KFSConstants.BALANCE_TYPE_ACTUAL);
List<String> objectTypeCodes = new ArrayList<String>();
objectTypeCodes.add(LaborConstants.BalanceInquiries.EMPLOYEE_FUNDING_EXPENSE_OBJECT_TYPE_CODE);
objectTypeCodes.add(LaborConstants.BalanceInquiries.EMPLOYEE_FUNDING_NORMAL_OP_EXPENSE_OBJECT_TYPE_CODE);
criteria.addIn(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE, objectTypeCodes);
return this.findFundsRawData(criteria);
}
// get the encumbrance funds according to the given criteria
protected Iterator<Object[]> findEncumbranceFundsRawData(Map fieldValues) {
Criteria criteria = OJBUtility.buildCriteriaFromMap(fieldValues, new LedgerBalance());
criteria.addEqualTo(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE, KFSConstants.BALANCE_TYPE_INTERNAL_ENCUMBRANCE);
return this.findFundsRawData(criteria);
}
// get the funds based on the given criteria
protected Iterator<Object[]> findFundsRawData(Criteria criteria) {
ReportQueryByCriteria query = QueryFactory.newReportQuery(LedgerBalance.class, criteria);
List<String> groupByList = this.getGroupByListForFundingInquiry();
String[] groupBy = (String[]) groupByList.toArray(new String[groupByList.size()]);
query.addGroupBy(groupBy);
List<String> getAttributeList = getAttributeListForFundingInquiry(false);
String[] attributes = (String[]) getAttributeList.toArray(new String[getAttributeList.size()]);
query.setAttributes(attributes);
OJBUtility.limitResultSize(query);
return getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query);
}
// get the balance summary based on the given criteria
protected Iterator<Object[]> findBalanceSummaryRawData(Criteria criteria) {
ReportQueryByCriteria query = QueryFactory.newReportQuery(LedgerBalance.class, criteria);
List<String> groupByList = this.getGroupByListForBalanceSummary();
String[] groupBy = (String[]) groupByList.toArray(new String[groupByList.size()]);
query.addGroupBy(groupBy);
List<String> getAttributeList = this.getAttributeListForBalanceSummary(false);
String[] attributes = (String[]) getAttributeList.toArray(new String[getAttributeList.size()]);
query.setAttributes(attributes);
query.addOrderByAscending(groupByList.get(0));
return getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query);
}
// marshal into AccountStatusBaseFunds from the query result
protected LedgerBalance marshalFundsAsLedgerBalance(Object[] queryResult) {
LedgerBalance ledgerBalance = new LedgerBalance();
List<String> keyFields = this.getAttributeListForFundingInquiry(true);
ObjectUtil.buildObject(ledgerBalance, queryResult, keyFields);
return ledgerBalance;
}
// marshal into AccountStatusBaseFunds from the query result
protected EmployeeFunding marshalFundsAsEmployeeFunding(Object[] queryResult) {
EmployeeFunding employeeFunding = new EmployeeFunding();
List<String> keyFields = this.getAttributeListForFundingInquiry(true);
ObjectUtil.buildObject(employeeFunding, queryResult, keyFields);
return employeeFunding;
}
// marshal into LaborBalanceSummary from the query result
protected LaborBalanceSummary marshalFundsAsLaborBalanceSummary(Object[] queryResult) {
return new LaborBalanceSummary(queryResult);
}
// define the attribute list that can be used to group the search results
protected List<String> getGroupByListForFundingInquiry() {
List<String> groupByList = new ArrayList<String>();
groupByList.add(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR);
groupByList.add(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
groupByList.add(KFSPropertyConstants.ACCOUNT_NUMBER);
groupByList.add(KFSPropertyConstants.SUB_ACCOUNT_NUMBER);
groupByList.add(KFSPropertyConstants.FINANCIAL_OBJECT_CODE);
groupByList.add(KFSPropertyConstants.FINANCIAL_SUB_OBJECT_CODE);
groupByList.add(KFSPropertyConstants.FINANCIAL_OBJECT_TYPE_CODE);
groupByList.add(KFSPropertyConstants.POSITION_NUMBER);
groupByList.add(KFSPropertyConstants.EMPLID);
return groupByList;
}
// define the return attribute list for funding query
protected List<String> getAttributeListForFundingInquiry(boolean isAttributeNameNeeded) {
List<String> attributeList = getGroupByListForFundingInquiry();
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.ACCOUNTING_LINE_ANNUAL_BALANCE_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.FINANCIAL_BEGINNING_BALANCE_LINE_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.CONTRACTS_GRANTS_BEGINNING_BALANCE_AMOUNT, isAttributeNameNeeded));
return attributeList;
}
// define the attribute list that can be used to group the search results
protected List<String> getGroupByListForBalanceSummary() {
List<String> groupByList = new ArrayList<String>();
groupByList.add("account.subFundGroup.fundGroupCode");
return groupByList;
}
// define the return attribute list for balance summary
protected List<String> getAttributeListForBalanceSummary(boolean isAttributeNameNeeded) {
List<String> attributeList = getGroupByListForBalanceSummary();
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.ACCOUNTING_LINE_ANNUAL_BALANCE_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.FINANCIAL_BEGINNING_BALANCE_LINE_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.CONTRACTS_GRANTS_BEGINNING_BALANCE_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.MONTH1_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.MONTH2_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.MONTH3_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.MONTH4_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.MONTH5_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.MONTH6_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.MONTH7_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.MONTH8_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.MONTH9_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.MONTH10_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.MONTH11_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.MONTH12_AMOUNT, isAttributeNameNeeded));
attributeList.add(ConsolidationUtil.wrapAttributeName(KFSPropertyConstants.MONTH13_AMOUNT, isAttributeNameNeeded));
return attributeList;
}
/**
* @see org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao#findBalancesForFiscalYear(java.lang.Integer, java.util.Map,
* java.util.List, java.util.List)
*/
public Iterator<LedgerBalanceForYearEndBalanceForward> findBalancesForFiscalYear(Integer fiscalYear, Map<String, String> fieldValues, List<String> subFundGroupCodes, List<String> fundGroupCodes) {
Criteria criteria = OJBUtility.buildCriteriaFromMap(fieldValues, new LedgerBalanceForYearEndBalanceForward());
criteria.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, fiscalYear);
String chartAccountsCode = fieldValues.get(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
String accountNumber = fieldValues.get(KFSPropertyConstants.ACCOUNT_NUMBER);
// add subfund criteria if the account is not provided
if (StringUtils.isEmpty(chartAccountsCode) || StringUtils.isEmpty(accountNumber)) {
if (subFundGroupCodes != null && !subFundGroupCodes.isEmpty()) {
Criteria criteriaForSubFundGroup = new Criteria();
String subFundGroupFieldName = KFSPropertyConstants.ACCOUNT + "." + KFSPropertyConstants.SUB_FUND_GROUP_CODE;
criteriaForSubFundGroup.addIn(subFundGroupFieldName, subFundGroupCodes);
if (fundGroupCodes != null && !fundGroupCodes.isEmpty()) {
Criteria criteriaForFundGroup = new Criteria();
String fundGroupFieldName = KFSPropertyConstants.ACCOUNT + "." + KFSPropertyConstants.SUB_FUND_GROUP + "." + KFSPropertyConstants.FUND_GROUP_CODE;
criteriaForFundGroup.addIn(fundGroupFieldName, fundGroupCodes);
criteriaForSubFundGroup.addOrCriteria(criteriaForFundGroup);
}
criteria.addAndCriteria(criteriaForSubFundGroup);
}
}
QueryByCriteria query = QueryFactory.newQuery(LedgerBalanceForYearEndBalanceForward.class, criteria);
return getPersistenceBrokerTemplate().getIteratorByQuery(query);
}
/**
* @see org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao#findAccountsInFundGroups(java.lang.Integer, java.util.Map,
* java.util.List, java.util.List)
*/
public List<List<String>> findAccountsInFundGroups(Integer fiscalYear, Map<String, String> fieldValues, List<String> subFundGroupCodes, List<String> fundGroupCodes) {
Criteria criteria = OJBUtility.buildCriteriaFromMap(fieldValues, new LedgerBalanceForYearEndBalanceForward());
criteria.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, fiscalYear);
if (subFundGroupCodes != null && !subFundGroupCodes.isEmpty()) {
Criteria criteriaForSubFundGroup = new Criteria();
String subFundGroupFieldName = KFSPropertyConstants.ACCOUNT + "." + KFSPropertyConstants.SUB_FUND_GROUP_CODE;
criteriaForSubFundGroup.addIn(subFundGroupFieldName, subFundGroupCodes);
if (fundGroupCodes != null && !fundGroupCodes.isEmpty()) {
Criteria criteriaForFundGroup = new Criteria();
String fundGroupFieldName = KFSPropertyConstants.ACCOUNT + "." + KFSPropertyConstants.SUB_FUND_GROUP + "." + KFSPropertyConstants.FUND_GROUP_CODE;
criteriaForFundGroup.addIn(fundGroupFieldName, fundGroupCodes);
criteriaForSubFundGroup.addOrCriteria(criteriaForFundGroup);
}
criteria.addAndCriteria(criteriaForSubFundGroup);
}
ReportQueryByCriteria query = QueryFactory.newReportQuery(LedgerBalanceForYearEndBalanceForward.class, criteria);
query.setAttributes(LaborConstants.ACCOUNT_FIELDS);
query.setDistinct(true);
Iterator<Object[]> accountIterator = getPersistenceBrokerTemplate().getReportQueryIteratorByQuery(query);
List<List<String>> accounts = new ArrayList<List<String>>();
while (accountIterator != null && accountIterator.hasNext()) {
Object[] accountObject = accountIterator.next();
List<String> account = new ArrayList<String>();
account.add(accountObject[0].toString());
account.add(accountObject[1].toString());
accounts.add(account);
}
return accounts;
}
/**
* @see org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao#findLedgerBalances(java.util.Map, java.util.Map, java.util.Set,
* java.util.List, java.util.List)
*/
public Collection<LedgerBalance> findLedgerBalances(Map<String, List<String>> fieldValues, Map<String, List<String>> excludedFieldValues, Set<Integer> fiscalYears, List<String> balanceTypeList, List<String> positionObjectGroupCodes) {
Criteria criteria = new Criteria();
for (String fieldName : fieldValues.keySet()) {
Criteria criteriaForIncludedFields = new Criteria();
criteria.addIn(fieldName, fieldValues.get(fieldName));
criteria.addAndCriteria(criteriaForIncludedFields);
}
for (String fieldName : excludedFieldValues.keySet()) {
Criteria criteriaForExcludedFields = new Criteria();
criteria.addNotIn(fieldName, excludedFieldValues.get(fieldName));
criteria.addAndCriteria(criteriaForExcludedFields);
}
if (fiscalYears != null && !fiscalYears.isEmpty()) {
Criteria criteriaForFiscalyear = new Criteria();
criteriaForFiscalyear.addIn(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, fiscalYears);
criteria.addAndCriteria(criteriaForFiscalyear);
}
if (balanceTypeList != null && !balanceTypeList.isEmpty()) {
Criteria criteriaForBalanceTypes = new Criteria();
criteriaForBalanceTypes.addIn(KFSPropertyConstants.FINANCIAL_BALANCE_TYPE_CODE, balanceTypeList);
criteria.addAndCriteria(criteriaForBalanceTypes);
}
if (positionObjectGroupCodes != null && !positionObjectGroupCodes.isEmpty()) {
Criteria criteriaForLaborObjects = new Criteria();
criteriaForLaborObjects.addIn(KFSPropertyConstants.LABOR_OBJECT + "." + KFSPropertyConstants.POSITION_OBJECT_GROUP_CODE, positionObjectGroupCodes);
criteria.addAndCriteria(criteriaForLaborObjects);
}
QueryByCriteria query = QueryFactory.newQuery(LedgerBalance.class, criteria);
return getPersistenceBrokerTemplate().getCollectionByQuery(query);
}
/**
* @see org.kuali.kfs.module.ld.dataaccess.LaborLedgerBalanceDao#deleteLedgerBalancesPriorToYear(java.lang.Integer,
* java.lang.String)
*/
public void deleteLedgerBalancesPriorToYear(Integer fiscalYear, String chartOfAccountsCode) {
LOG.debug("deleteLedgerBalancesPriorToYear() started");
Criteria criteria = new Criteria();
criteria.addLessThan(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, fiscalYear);
criteria.addEqualTo(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, chartOfAccountsCode);
QueryByCriteria query = new QueryByCriteria(LedgerBalance.class, criteria);
getPersistenceBrokerTemplate().deleteByQuery(query);
}
/**
* @see org.kuali.kfs.gl.dataaccess.BalancingDao#findCountGreaterOrEqualThan(java.lang.Integer)
*/
public Integer findCountGreaterOrEqualThan(Integer year) {
Criteria criteria = new Criteria();
criteria.addGreaterOrEqualThan(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, year);
ReportQueryByCriteria query = QueryFactory.newReportQuery(LedgerBalance.class, criteria);
return getPersistenceBrokerTemplate().getCount(query);
}
}