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.purap.service; 017 018 import java.util.List; 019 import java.util.Set; 020 021 import org.kuali.kfs.module.purap.businessobject.PurApAccountingLine; 022 import org.kuali.kfs.module.purap.businessobject.PurApItem; 023 import org.kuali.kfs.module.purap.document.PaymentRequestDocument; 024 import org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocument; 025 import org.kuali.kfs.module.purap.util.SummaryAccount; 026 import org.kuali.kfs.module.purap.util.UseTaxContainer; 027 import org.kuali.kfs.sys.businessobject.SourceAccountingLine; 028 import org.kuali.rice.kns.util.KualiDecimal; 029 030 /** 031 * This class is used to generate Account Summaries for the Purchasing Accounts Payable Module account lists as well as to generate account lists that can be 032 * used for distribution to below the line items or any other items that may require distribution 033 */ 034 public interface PurapAccountingService { 035 036 /** 037 * unused see other generateAccountDistribution methods 038 * @deprecated 039 * @param accounts 040 * @param totalAmount 041 * @param percentScale 042 * @return 043 */ 044 public List<PurApAccountingLine> generateAccountDistributionForProration(List<SourceAccountingLine> accounts, KualiDecimal totalAmount, Integer percentScale); 045 046 /** 047 * 048 * Determines an appropriate account distribution for a particular Purchasing Accounts Payable list of Accounts. It does this by looking at the accounts that were provided 049 * which should be generated from a generateSummary method. It then builds up a list of PurApAccountingLines (specified by the Class variable) and tries to determine the 050 * appropriate percents to use on the new accounts, this may require some moving of percents to the last account as a slush. 051 * 052 * @param accounts the incoming source accounts from generateSummary 053 * @param totalAmount the total amount of the document 054 * @param percentScale the scale to round to 055 * @param clazz the class of the Purchasing Accounts Payable Account 056 * @return a list of new Purchasing Accounts Payable Accounts 057 */ 058 public List<PurApAccountingLine> generateAccountDistributionForProration(List<SourceAccountingLine> accounts, KualiDecimal totalAmount, Integer percentScale, Class clazz); 059 060 /** 061 * 062 * Determines an appropriate account distribution for a particular Purchasing Accounts Payable list of Accounts. It does this by looking at the accounts that were provided 063 * which should be generated from a generateSummary method. It then builds up a list of PurApAccountingLines (specified by the Class variable) and tries to determine the 064 * appropriate percents to use on the new accounts, this may require some moving of percents to the last account as a slush. This is called when a document has a zero dollar 065 * total 066 067 * @param accounts the incoming source accounts from generateSummary 068 * @param percentScale the scale to round to 069 * @param clazz the class of the Purchasing Accounts Payable Account 070 * @return a list of new Purchasing Accounts Payable Accounts 071 */ 072 public List<PurApAccountingLine> generateAccountDistributionForProrationWithZeroTotal(PurchasingAccountsPayableDocument purapdoc); 073 074 /** 075 * 076 * This creates summary accounts based on a list of items. 077 * @param document the document to generate the summary accounts from 078 * @return a list of summary accounts. 079 */ 080 public List<SummaryAccount> generateSummaryAccounts(PurchasingAccountsPayableDocument document); 081 082 /** 083 * 084 * This creates summary accounts based on a list of items excluding zero totals. 085 * @param document the document to generate the summary accounts from 086 * @return a list of summary accounts. 087 */ 088 public List<SummaryAccount> generateSummaryAccountsWithNoZeroTotals(PurchasingAccountsPayableDocument document); 089 090 091 092 /** 093 * 094 * This creates summary accounts based on a list of items excluding zero totals and use tax. 095 * @param document the document to generate the summary accounts from 096 * @return a list of summary accounts. 097 */ 098 public List<SummaryAccount> generateSummaryAccountsWithNoZeroTotalsNoUseTax(PurchasingAccountsPayableDocument document); 099 100 101 /** 102 * 103 * Generates an account summary, that is it creates a list of source accounts 104 * by rounding up the Purchasing Accounts Payable accounts off of the Purchasing Accounts Payable items. 105 * 106 * @param document the document to generate the summary from 107 * @return a list of source accounts 108 */ 109 public List<SourceAccountingLine> generateSummary(List<PurApItem> items); 110 111 /** 112 * Generates an account summary with only taxable accounts. 113 * 114 * @param items 115 * @return 116 */ 117 public List<SourceAccountingLine> generateSummaryTaxableAccounts(List<PurApItem> items); 118 119 /** 120 * 121 * convenience method that generates a list of source accounts while excluding items with 122 * $0 amounts 123 * 124 * @param items the items to generate source accounts from 125 * @return a list of source accounts "rolled up" from the purap accounts 126 */ 127 public List<SourceAccountingLine> generateSummaryWithNoZeroTotals(List<PurApItem> items); 128 129 /** 130 * 131 * convenience method that generates a list of source accounts while excluding items with 132 * $0 amounts and use tax 133 * 134 * @param items the items to generate source accounts from 135 * @return a list of source accounts "rolled up" from the purap accounts 136 */ 137 public List<SourceAccountingLine> generateSummaryWithNoZeroTotalsNoUseTax(List<PurApItem> items); 138 139 /** 140 * 141 * convenience method that generates a list of source accounts while excluding items with 142 * $0 amounts and using the alternate amount 143 * 144 * @param items the items to generate source accounts from 145 * @return a list of source accounts "rolled up" from the purap accounts 146 */ 147 public List<SourceAccountingLine> generateSummaryWithNoZeroTotalsUsingAlternateAmount(List<PurApItem> items); 148 149 /** 150 * 151 * convenience method that generates a list of source accounts while excluding items with 152 * the specified item types 153 * 154 * @param items the items to generate source accounts from 155 * @param excludedItemTypeCodes the item types to exclude 156 * @return a list of source accounts "rolled up" from the purap accounts 157 */ 158 public List<SourceAccountingLine> generateSummaryExcludeItemTypes(List<PurApItem> items, Set excludedItemTypeCodes); 159 160 /** 161 * 162 * convenience method that generates a list of source accounts while excluding items with 163 * the specified item types and not including items with zero totals 164 * 165 * @param items the items to generate source accounts from 166 * @param excludedItemTypeCodes the item types to exclude 167 * @return a list of source accounts "rolled up" from the purap accounts 168 */ 169 public List<SourceAccountingLine> generateSummaryExcludeItemTypesAndNoZeroTotals(List<PurApItem> items, Set excludedItemTypeCodes); 170 171 /** 172 * 173 * convenience method that generates a list of source accounts while only including items with 174 * the specified item types 175 * 176 * @param items the items to generate source accounts from 177 * @param excludedItemTypeCodes the item types to include 178 * @return a list of source accounts "rolled up" from the purap accounts 179 */ 180 public List<SourceAccountingLine> generateSummaryIncludeItemTypes(List<PurApItem> items, Set includedItemTypeCodes); 181 182 /** 183 * 184 * convenience method that generates a list of source accounts while only including items with 185 * the specified item types and not including items with zero totals 186 * 187 * @param items the items to generate source accounts from 188 * @param excludedItemTypeCodes the item types to include 189 * @return a list of source accounts "rolled up" from the purap accounts 190 */ 191 public List<SourceAccountingLine> generateSummaryIncludeItemTypesAndNoZeroTotals(List<PurApItem> items, Set includedItemTypeCodes); 192 193 /** 194 * Updates account amounts based on the percents. If this is a preq past full entry it updates the 195 * percents based on the amounts instead 196 * 197 * @param document the document 198 */ 199 public void updateAccountAmounts(PurchasingAccountsPayableDocument document); 200 201 /** 202 * Updates a single items account amounts 203 * 204 * @param item 205 */ 206 public void updateItemAccountAmounts(PurApItem item); 207 208 public List<PurApAccountingLine> getAccountsFromItem(PurApItem item); 209 210 /** 211 * Deletes the ap summary accounts by the id of the doc type (Payment Request - PREQ or Credit Memo - CM) 212 * 213 * @param purapDocumentIdentifier The purapDocumentIdentifier of the document whose summary accounts are to be deleted. 214 */ 215 public void deleteSummaryAccounts(Integer purapDocumentIdentifier, String docType); 216 217 /** 218 * Retrieves the ap summary accounts by the id of the doc type (Payment Request - PREQ or Credit Memo - CM) 219 * 220 * @param purapDocumentIdentifier The purapDocumentIdentifier of the document. 221 */ 222 public List getAccountsPayableSummaryAccounts(Integer purapDocumentIdentifier, String docType); 223 224 /** 225 * 226 * This method generates summary accounts for a vendor payment. 227 * @param document 228 * @return This will get the proper amount on the items that is sent to the vendor 229 */ 230 public List<SourceAccountingLine> generateSourceAccountsForVendorRemit(PurchasingAccountsPayableDocument document); 231 232 /** 233 * Converts the amount to percent and updates the percent field on the CreditMemoAccount 234 * 235 * @param pr The payment request document containing the accounts whose percentage would be set. 236 */ 237 public void convertMoneyToPercent(PaymentRequestDocument pr); 238 239 /** 240 * Generates use tax helper class for a purap document 241 * @param document 242 * @return useTaxContainer 243 */ 244 public List<UseTaxContainer> generateUseTaxAccount(PurchasingAccountsPayableDocument document); 245 246 /** 247 * Checks whether the specified accounting line in the specified PurAP document is used for tax withholding. 248 * This applies only to PaymentRequestDocument; otherwise it always returns false. 249 * @param document the specified PurAP document 250 * @param account the specified accounting line 251 * @return true if the accounting line is a tax account 252 */ 253 public boolean isTaxAccount(PurchasingAccountsPayableDocument document, SourceAccountingLine account); 254 255 /** 256 * calculates values for a list of accounting lines based on an amount 257 * 258 * @param <T> 259 * @param sourceAccountingLines 260 * @param totalAmount 261 */ 262 public <T extends PurApAccountingLine> void updateAccountAmountsWithTotal(List<T> sourceAccountingLines, KualiDecimal totalAmount); 263 264 /** 265 * Merges list 2 into list 1 266 * 267 * @param list1 268 * @param list2 269 * @return 270 */ 271 public List<SourceAccountingLine> mergeAccountingLineLists(List<SourceAccountingLine> accountingLines1, List<SourceAccountingLine> accountingLines2); 272 273 }