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.bc.document.dataaccess; 017 018 import java.util.Collection; 019 import java.util.List; 020 021 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAccountOrganizationHierarchy; 022 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionAccountReports; 023 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionFundingLock; 024 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionHeader; 025 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionOrganizationReports; 026 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPosition; 027 import org.kuali.kfs.module.bc.businessobject.BudgetConstructionPullup; 028 import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionAppointmentFunding; 029 import org.kuali.kfs.module.bc.businessobject.PendingBudgetConstructionGeneralLedger; 030 import org.kuali.kfs.module.bc.document.BudgetConstructionDocument; 031 import org.kuali.rice.kns.util.KualiInteger; 032 033 034 /** 035 * This interface defines the methods that a BudgetConstructionDao must provide. 036 */ 037 public interface BudgetConstructionDao { 038 039 /** 040 * This gets a BudgetConstructionHeader using the candidate key chart, account, subaccount, fiscalyear 041 * 042 * @param chartOfAccountsCode 043 * @param accountNumber 044 * @param subAccountNumber 045 * @param fiscalYear 046 * @return BudgetConstructionHeader 047 */ 048 public BudgetConstructionHeader getByCandidateKey(String chartOfAccountsCode, String accountNumber, String subAccountNumber, Integer fiscalYear); 049 050 /** 051 * This saves a BudgetConstructionHeader object to the database 052 * 053 * @param bcHeader 054 */ 055 public void saveBudgetConstructionHeader(BudgetConstructionHeader bcHeader); 056 057 /** 058 * Save a BudgetConstructionDocument object to the database 059 * 060 * @param bcDocument 061 */ 062 public void saveBudgetConstructionDocument(BudgetConstructionDocument bcDocument); 063 064 065 /** 066 * This gets a BudgetConstructionFundingLock using the primary key chart, account, subaccount, fiscalyear, pUId 067 * 068 * @param chartOfAccountsCode 069 * @param accountNumber 070 * @param subAccountNumber 071 * @param fiscalYear 072 * @param principalId 073 * @return BudgetConstructionFundingLock 074 */ 075 public BudgetConstructionFundingLock getByPrimaryId(String chartOfAccountsCode, String accountNumber, String subAccountNumber, Integer fiscalYear, String principalId); 076 077 /** 078 * This saves a BudgetConstructionFundingLock to the database 079 * 080 * @param budgetConstructionFundingLock 081 */ 082 public void saveBudgetConstructionFundingLock(BudgetConstructionFundingLock budgetConstructionFundingLock); 083 084 /** 085 * This deletes a BudgetConstructionFundingLock from the database 086 * 087 * @param budgetConstructionFundingLock 088 */ 089 public void deleteBudgetConstructionFundingLock(BudgetConstructionFundingLock budgetConstructionFundingLock); 090 091 /** 092 * This gets the set of BudgetConstructionFundingLocks asssociated with a BC EDoc (account). Each BudgetConstructionFundingLock 093 * has the positionNumber dummy attribute set to the associated Position that is locked. A positionNumber value of "NotFnd" 094 * indicates the BudgetConstructionFundingLock is an orphan. 095 * 096 * @param chartOfAccountsCode 097 * @param accountNumber 098 * @param subAccountNumber 099 * @param fiscalYear 100 * @return Collection<BudgetConstructionFundingLock> 101 */ 102 public Collection<BudgetConstructionFundingLock> getFlocksForAccount(String chartOfAccountsCode, String accountNumber, String subAccountNumber, Integer fiscalYear); 103 104 /** 105 * Returns the position number associated with a funding lock or the not found string if the lock is an orphan. 106 * 107 * @param budgetConstructionFundingLock - funding lock to get position for 108 * @return position number associated with lock 109 */ 110 public String getPositionAssociatedWithFundingLock(BudgetConstructionFundingLock budgetConstructionFundingLock); 111 112 /** 113 * Gets a BudgetConstructionPosition from the database by the primary key positionNumber, fiscalYear 114 * 115 * @param positionNumber 116 * @param fiscalYear 117 * @return BudgetConstructionPosition 118 */ 119 public BudgetConstructionPosition getByPrimaryId(String positionNumber, Integer fiscalYear); 120 121 /** 122 * Saves a BudgetConstructionPosition to the database 123 * 124 * @param bcPosition 125 */ 126 public void saveBudgetConstructionPosition(BudgetConstructionPosition bcPosition); 127 128 /** 129 * This method deletes all BudgetConstructionPullup rows associated with a user. 130 * 131 * @param principalName 132 */ 133 public void deleteBudgetConstructionPullupByUserId(String principalName); 134 135 /** 136 * This method returns a list of BudgetConstructionPullup objects (organizations) ownded by the user that have the pullflag set 137 * 138 * @param principalName 139 * @return 140 */ 141 public List<BudgetConstructionPullup> getBudgetConstructionPullupFlagSetByUserId(String principalName); 142 143 /** 144 * This returns a list of BudgetConstructionPullup objects (organizations) that are children to the passed in organization for 145 * the user 146 * 147 * @param principalId 148 * @param chartOfAccountsCode 149 * @param organizationCode 150 * @return 151 */ 152 public List<BudgetConstructionPullup> getBudgetConstructionPullupChildOrgs(String principalId, String chartOfAccountsCode, String organizationCode); 153 154 /** 155 * Returns the sum of the salary detail request amounts for an accounting line 156 * 157 * @param salaryDetailLine 158 * @return 159 */ 160 public KualiInteger getPendingBudgetConstructionAppointmentFundingRequestSum(PendingBudgetConstructionGeneralLedger salaryDetailLine); 161 162 /** 163 * returns a list of fringe benefit accounting lines for a document 164 * 165 * @param documentNumber 166 * @param fringeObjects 167 * @return 168 */ 169 public List getDocumentPBGLFringeLines(String documentNumber, List fringeObjects); 170 171 /** 172 * Determines is a user is an active Budget Construction document delegate approver for the Budget Construction document type or 173 * the 'ALL' document type 174 * 175 * @param chartCd 176 * @param accountNbr 177 * @param principalId 178 * @return 179 */ 180 public boolean isDelegate(String chartCd, String accountNbr, String principalId); 181 182 /** 183 * Returns a list of account organization hierarchy levels for an account 184 * 185 * @param chartOfAccountsCode 186 * @param accountNumber 187 * @param universityFiscalYear 188 * @return 189 */ 190 public List<BudgetConstructionAccountOrganizationHierarchy> getAccountOrgHierForAccount(String chartOfAccountsCode, String accountNumber, Integer universityFiscalYear); 191 192 /** 193 * Returns a list of labor objects that are Salary Setting detail related 194 * 195 * @param universityFiscalYear 196 * @param chartOfAccountsCode 197 * @return 198 */ 199 public List<String> getDetailSalarySettingLaborObjects(Integer universityFiscalYear, String chartOfAccountsCode); 200 201 /** 202 * Returns a list of Pending Budget GL rows that are Salary Setting detail related, based on the set of salarySettingObjects 203 * passed in 204 * 205 * @param documentNumber 206 * @param salarySettingObjects 207 * @return 208 */ 209 public List getPBGLSalarySettingRows(String documentNumber, List salarySettingObjects); 210 211 /** 212 * Retrieves all <code>PendingBudgetConstructionAppointmentFunding</code> records for the given position key. 213 * 214 * @param universityFiscalYear budget fiscal year, primary key field for position record 215 * @param positionNumber position number, primary key field for position record 216 * @return List of PendingBudgetConstructionAppointmentFunding objects 217 */ 218 public List<PendingBudgetConstructionAppointmentFunding> getAllFundingForPosition(Integer universityFiscalYear, String positionNumber); 219 220 /** 221 * Returns a <code>BudgetConstructionAccountReports</code> object for the given key. 222 * 223 * @param chartOfAccountsCode 224 * @param accountNumber 225 * @return 226 */ 227 public BudgetConstructionAccountReports getAccountReports(String chartOfAccountsCode, String accountNumber); 228 229 /** 230 * Returns a <code>BudgetConstructionOrganizationReports</code> object for the given key. 231 * 232 * @param chartOfAccountsCode 233 * @param organizationCode 234 * @return 235 */ 236 public BudgetConstructionOrganizationReports getOrganizationReports(String chartOfAccountsCode, String organizationCode); 237 238 /** 239 * Builds an Account Organization Hierarchy by recursively calling itself inserting each Hierarchy row (<code>BudgetConstructionAccountOrganizationHierarchy</code>) 240 * while walking the organization reports to structure (<code>BudgetConstructionOrganizationReports</code>) stopping at the 241 * root of the organization tree or overflow value, whatever comes first. 242 * 243 * @param rootChart 244 * @param rootOrganization 245 * @param universityFiscalYear 246 * @param chartOfAccountsCode 247 * @param accountNumber 248 * @param currentLevel 249 * @param organizationChartOfAccountsCode 250 * @param organizationCode 251 * @return 252 */ 253 public boolean insertAccountIntoAccountOrganizationHierarchy(String rootChart, String rootOrganization, Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber, Integer currentLevel, String organizationChartOfAccountsCode, String organizationCode); 254 255 /** 256 * deletes an existing set of Account Organization Hierarchy objects from the DB for the account key passed in 257 * 258 * @param universityFiscalYear 259 * @param chartOfAccountsCode 260 * @param accountNumber 261 */ 262 public void deleteExistingAccountOrganizationHierarchy(Integer universityFiscalYear, String chartOfAccountsCode, String accountNumber); 263 } 264