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.gl.dataaccess.impl; 017 018 import java.util.Iterator; 019 020 import org.apache.commons.lang.StringUtils; 021 import org.apache.ojb.broker.query.Criteria; 022 import org.apache.ojb.broker.query.QueryByCriteria; 023 import org.apache.ojb.broker.query.QueryFactory; 024 import org.kuali.kfs.gl.GeneralLedgerConstants; 025 import org.kuali.kfs.gl.businessobject.ExpenditureTransaction; 026 import org.kuali.kfs.gl.businessobject.Transaction; 027 import org.kuali.kfs.gl.dataaccess.ExpenditureTransactionDao; 028 import org.kuali.kfs.sys.KFSPropertyConstants; 029 import org.kuali.rice.kns.dao.impl.PlatformAwareDaoBaseOjb; 030 031 /** 032 * The OJB implmentation of ExpenditureTransactionDao 033 */ 034 public class ExpenditureTransactionDaoOjb extends PlatformAwareDaoBaseOjb implements ExpenditureTransactionDao { 035 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(ExpenditureTransactionDaoOjb.class); 036 037 /** 038 * Constructs a ExpenditureTransactionDaoOjb instance 039 */ 040 public ExpenditureTransactionDaoOjb() { 041 super(); 042 } 043 044 /** 045 * Queries the database to find the expenditure transaction in the database that would be affected if the given transaction is 046 * posted 047 * 048 * @param t a transaction to find a related expenditure transaction for 049 * @return the expenditure transaction if found, null otherwise 050 * @see org.kuali.kfs.gl.dataaccess.ExpenditureTransactionDao#getByTransaction(org.kuali.kfs.gl.businessobject.Transaction) 051 */ 052 public ExpenditureTransaction getByTransaction(Transaction t) { 053 LOG.debug("getByTransaction() started"); 054 055 Criteria crit = new Criteria(); 056 crit.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR, t.getUniversityFiscalYear()); 057 crit.addEqualTo(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, t.getChartOfAccountsCode()); 058 crit.addEqualTo(KFSPropertyConstants.ACCOUNT_NUMBER, t.getAccountNumber()); 059 crit.addEqualTo(KFSPropertyConstants.SUB_ACCOUNT_NUMBER, t.getSubAccountNumber()); 060 crit.addEqualTo(KFSPropertyConstants.OBJECT_CODE, t.getFinancialObjectCode()); 061 crit.addEqualTo(KFSPropertyConstants.SUB_OBJECT_CODE, t.getFinancialSubObjectCode()); 062 crit.addEqualTo(KFSPropertyConstants.BALANCE_TYPE_CODE, t.getFinancialBalanceTypeCode()); 063 crit.addEqualTo(KFSPropertyConstants.OBJECT_TYPE_CODE, t.getFinancialObjectTypeCode()); 064 crit.addEqualTo(KFSPropertyConstants.UNIVERSITY_FISCAL_ACCOUNTING_PERIOD, t.getUniversityFiscalPeriodCode()); 065 crit.addEqualTo(KFSPropertyConstants.PROJECT_CODE, t.getProjectCode()); 066 067 if (StringUtils.isBlank(t.getOrganizationReferenceId())) { 068 crit.addEqualTo(KFSPropertyConstants.ORGANIZATION_REFERENCE_ID, GeneralLedgerConstants.getDashOrganizationReferenceId()); 069 } 070 else { 071 crit.addEqualTo(KFSPropertyConstants.ORGANIZATION_REFERENCE_ID, t.getOrganizationReferenceId()); 072 } 073 074 QueryByCriteria qbc = QueryFactory.newQuery(ExpenditureTransaction.class, crit); 075 return (ExpenditureTransaction) getPersistenceBrokerTemplate().getObjectByQuery(qbc); 076 } 077 078 /** 079 * Fetches all expenditure transactions currently in the database 080 * 081 * @return an Iterator with all expenditure transactions from the database 082 * @see org.kuali.kfs.gl.dataaccess.ExpenditureTransactionDao#getAllExpenditureTransactions() 083 */ 084 public Iterator getAllExpenditureTransactions() { 085 LOG.debug("getAllExpenditureTransactions() started"); 086 try { 087 Criteria crit = new Criteria(); 088 // We want them all so no criteria is added 089 090 QueryByCriteria qbc = QueryFactory.newQuery(ExpenditureTransaction.class, crit); 091 return getPersistenceBrokerTemplate().getIteratorByQuery(qbc); 092 } 093 catch (Exception e) { 094 throw new RuntimeException(e); 095 } 096 } 097 098 /** 099 * Deletes the given expenditure transaction 100 * 101 * @param et the expenditure transaction that will be removed, as such, from the database 102 * @see org.kuali.kfs.gl.dataaccess.ExpenditureTransactionDao#delete(org.kuali.kfs.gl.businessobject.ExpenditureTransaction) 103 */ 104 public void delete(ExpenditureTransaction et) { 105 LOG.debug("delete() started"); 106 107 getPersistenceBrokerTemplate().delete(et); 108 } 109 110 /** 111 * Saves an expenditure transaction 112 * 113 * @param et the expenditure transaction to save 114 * @see org.kuali.kfs.gl.dataaccess.ExpenditureTransactionDao#save(org.kuali.kfs.gl.businessobject.ExpenditureTransaction) 115 */ 116 public void save(ExpenditureTransaction et) { 117 LOG.debug("save() started"); 118 119 getPersistenceBrokerTemplate().store(et); 120 } 121 122 /** 123 * Since expenditure transactions are temporary, just like flies that live for a mere day, this method removes all of the 124 * currently existing expenditure transactions from the database, all expenditure transactions having run through the poster and 125 * fulfilled their lifecycle 126 * 127 * @see org.kuali.kfs.gl.dataaccess.ExpenditureTransactionDao#deleteAllExpenditureTransactions() 128 */ 129 public void deleteAllExpenditureTransactions() { 130 LOG.debug("deleteAllExpenditureTransactions() started"); 131 try{ 132 Iterator<ExpenditureTransaction> i = getAllExpenditureTransactions(); 133 while (i.hasNext()) { 134 ExpenditureTransaction et = i.next(); 135 if (LOG.isInfoEnabled()) { 136 LOG.info("The following ExpenditureTransaction was deleted: " + et.toString()); 137 } 138 delete(et); 139 } 140 } 141 catch (Exception e) { 142 throw new RuntimeException(e); 143 } 144 } 145 }