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.document; 017 018 import java.math.BigDecimal; 019 import java.sql.Date; 020 import java.util.List; 021 022 import org.kuali.kfs.module.purap.PurapWorkflowConstants.NodeDetails; 023 import org.kuali.kfs.module.purap.businessobject.ItemType; 024 import org.kuali.kfs.module.purap.businessobject.PurApItem; 025 import org.kuali.kfs.module.purap.businessobject.Status; 026 import org.kuali.kfs.module.purap.util.PurApItemUtils; 027 import org.kuali.rice.kns.bo.Country; 028 import org.kuali.kfs.sys.document.AccountingDocument; 029 import org.kuali.kfs.vnd.businessobject.VendorAddress; 030 import org.kuali.kfs.vnd.businessobject.VendorDetail; 031 import org.kuali.rice.kns.util.KualiDecimal; 032 033 034 /** 035 * Interface for Purchasing-Accounts Payable Documents. 036 */ 037 public interface PurchasingAccountsPayableDocument extends AccountingDocument, PurapItemOperations { 038 039 /** 040 * Returns true if posting year on document is set to use NEXT fiscal year. If set to anything besides NEXT, then return false. 041 * 042 * @return boolean 043 */ 044 public boolean isPostingYearNext(); 045 046 /** 047 * Returns true if posting year on document is set to use PRIOR fiscal year. If set to anything besides PRIOR, then return false. 048 * 049 * @return boolean 050 */ 051 public boolean isPostingYearPrior(); 052 053 /** 054 * If posting year on document is set to use NEXT fiscal year, then return NEXT. If set to anything besides NEXT, then return 055 * CURRENT fiscal year. This is assuming that the system does not allow the user to set a posting year beyond NEXT. 056 * 057 * @return Integer 058 */ 059 public Integer getPostingYearNextOrCurrent(); 060 061 /** 062 * Returns the Item Class. 063 * 064 * @return the Item Class. 065 */ 066 public Class getItemClass(); 067 068 /** 069 * Returns the source of this Purchasing Accounts Payable Document if exists. 070 * 071 * @return the source of this document if exists, else null. 072 */ 073 public PurchasingAccountsPayableDocument getPurApSourceDocumentIfPossible(); 074 075 /** 076 * Returns the label of the source of this Purchasing Accounts Payable Document if exists. 077 * 078 * @return the label of the document source if exists, else null. 079 */ 080 public String getPurApSourceDocumentLabelIfPossible(); 081 082 /** 083 * Returns true if this document is stopped in the specified route node. 084 * 085 * @param nodeDetails the node details of the specified node. 086 * @return true if this document is stopped in the specified route node. 087 */ 088 public boolean isDocumentStoppedInRouteNode(NodeDetails nodeDetails); 089 090 /** 091 * Adds the specified item to this document. 092 * 093 * @param item the specified item to add. 094 */ 095 public void addItem(PurApItem item); 096 097 /** 098 * Deletes the specified item from this document. 099 * 100 * @param item the specified item to delete. 101 */ 102 public void deleteItem(int lineNum); 103 104 /** 105 * Renumbers the item starting from the specified index. 106 * 107 * @param start the index of the starting item to be renumbered. 108 */ 109 public void renumberItems(int start); 110 111 /** 112 * Swaps the specified two items based on their item line numbers (which are one higher than the item positions in the list). 113 * 114 * @param position1 the position of the first item 115 * @param position2 the position of the second item 116 */ 117 public void itemSwap(int position1, int position2); 118 119 /** 120 * Determines the item line position if the user did not specify the line number on an above the line items before clicking on 121 * the add button. It subtracts the number of the below the line items on the list with the total item list size. 122 * 123 * @return the item line position of the last (highest) line number of above the line items. 124 */ 125 public int getItemLinePosition(); 126 127 /** 128 * Gets the item at the specified index. 129 * 130 * @param pos the specified index. 131 * @return the item at the specified index. 132 */ 133 public PurApItem getItem(int pos); 134 135 /** 136 * Gets all below the line item types. 137 * 138 * @return Returns a list of below the line item types. 139 */ 140 public String[] getBelowTheLineTypes(); 141 142 /** 143 * Computes the total dollar amount of all items. 144 * 145 * @return the total dollar amount of all items. 146 */ 147 public KualiDecimal getTotalDollarAmount(); 148 149 /** 150 * Sets the total dollar amount to the specified amount. 151 * 152 * @param the specified total amount. 153 */ 154 public void setTotalDollarAmount(KualiDecimal totalDollarAmount); 155 156 /** 157 * Computes the total dollar amount with the specified item types excluded. 158 * 159 * @param excludedTypes the types of items to be excluded. 160 * @return the total dollar amount with the specified item types excluded. 161 */ 162 public KualiDecimal getTotalDollarAmountAllItems(String[] excludedTypes); 163 164 public KualiDecimal getTotalDollarAmountAboveLineItems(); 165 /** 166 * Computes the pre tax total dollar amount of all items. 167 * 168 * @return the pre tax total dollar amount of all items. 169 */ 170 public KualiDecimal getTotalPreTaxDollarAmount(); 171 172 /** 173 * Sets the pre tax total dollar amount to the specified amount. 174 * 175 * @param the specified total amount. 176 */ 177 public void setTotalPreTaxDollarAmount(KualiDecimal totalDollarAmount); 178 179 /** 180 * Computes the pre tax total dollar amount with the specified item types excluded. 181 * 182 * @param excludedTypes the types of items to be excluded. 183 * @return the pre tax total dollar amount with the specified item types excluded. 184 */ 185 public KualiDecimal getTotalPreTaxDollarAmountAllItems(String[] excludedTypes); 186 187 public KualiDecimal getTotalTaxAmount(); 188 189 public void setTotalTaxAmount(KualiDecimal amount); 190 191 public KualiDecimal getTotalTaxAmountAllItems(String[] excludedTypes); 192 193 public KualiDecimal getTotalTaxAmountAboveLineItems(); 194 195 public KualiDecimal getTotalTaxAmountAboveLineItems(String[] excludedTypes); 196 197 public KualiDecimal getTotalTaxAmountWithExclusions(String[] excludedTypes, boolean includeBelowTheLine); 198 199 /** 200 * Sets vendor address fields based on a given VendorAddress. 201 * 202 * @param vendorAddress 203 */ 204 public void templateVendorAddress(VendorAddress vendorAddress); 205 206 public Country getVendorCountry(); 207 208 public Status getStatus(); 209 210 public VendorDetail getVendorDetail(); 211 212 public List<PurApItem> getItems(); 213 214 public void setItems(List items); 215 216 public String getVendorNumber(); 217 218 public void setVendorNumber(String vendorNumber); 219 220 public Integer getVendorHeaderGeneratedIdentifier(); 221 222 public void setVendorHeaderGeneratedIdentifier(Integer vendorHeaderGeneratedIdentifier); 223 224 public Integer getVendorDetailAssignedIdentifier(); 225 226 public void setVendorDetailAssignedIdentifier(Integer vendorDetailAssignedIdentifier); 227 228 public String getVendorCustomerNumber(); 229 230 public void setVendorCustomerNumber(String vendorCustomerNumber); 231 232 public Integer getPurapDocumentIdentifier(); 233 234 public void setPurapDocumentIdentifier(Integer identifier); 235 236 public String getStatusCode(); 237 238 public void setStatusCode(String statusCode); 239 240 public String getVendorCityName(); 241 242 public void setVendorCityName(String vendorCityName); 243 244 public String getVendorCountryCode(); 245 246 public void setVendorCountryCode(String vendorCountryCode); 247 248 public String getVendorLine1Address(); 249 250 public void setVendorLine1Address(String vendorLine1Address); 251 252 public String getVendorLine2Address(); 253 254 public void setVendorLine2Address(String vendorLine2Address); 255 256 public String getVendorName(); 257 258 public void setVendorName(String vendorName); 259 260 public String getVendorPostalCode(); 261 262 public void setVendorPostalCode(String vendorPostalCode); 263 264 public String getVendorStateCode(); 265 266 public void setVendorStateCode(String vendorStateCode); 267 268 public String getVendorAddressInternationalProvinceName(); 269 270 public void setVendorAddressInternationalProvinceName(String vendorAddressInternationalProvinceName); 271 272 public Integer getAccountsPayablePurchasingDocumentLinkIdentifier(); 273 274 public void setAccountsPayablePurchasingDocumentLinkIdentifier(Integer accountsPayablePurchasingDocumentLinkIdentifier); 275 276 public Integer getVendorAddressGeneratedIdentifier(); 277 278 public void setVendorAddressGeneratedIdentifier(Integer vendorAddressGeneratedIdentifier); 279 280 public boolean isUseTaxIndicator(); 281 282 public void setUseTaxIndicator(boolean useTaxIndicator); 283 284 public void fixItemReferences(); 285 286 public Date getTransactionTaxDate(); 287 288 public PurApItem getTradeInItem(); 289 290 public KualiDecimal getTotalDollarAmountForTradeIn(); 291 292 public List<PurApItem> getTradeInItems(); 293 294 /** 295 * Always returns true. 296 * This method is needed here because it's called by some tag files shared with PurAp documents. 297 * @return true. 298 */ 299 public boolean getIsATypeOfPurAPRecDoc(); 300 301 /** 302 * Determines whether the document is a type of PurchasingDocument. 303 * @return true if the document is a type of PurchasingDocument. 304 */ 305 public boolean getIsATypeOfPurDoc(); 306 307 /** 308 * Determines whether the document is a type of PurchseOrderDocument (including its subclass documents). 309 * @return true if the document is a type of PurchseOrderDocument. 310 */ 311 public boolean getIsATypeOfPODoc(); 312 313 /** 314 * Determines whether the document is a PurchaseOrderDocument (excluding its subclass documents). 315 * @return true if the document is a PurchaseOrderDocument. 316 */ 317 public boolean getIsPODoc(); 318 319 /** 320 * Determines whether the document is a RequisitionDocument. 321 * @return true if the document is a RequisitionDocument. 322 */ 323 public boolean getIsReqsDoc(); 324 325 /** 326 * Determines whether the inquiry links should be rendered 327 * for Object Code and Sub Object Code. 328 * 329 * @return 330 */ 331 public boolean isInquiryRendered(); 332 333 public boolean shouldGiveErrorForEmptyAccountsProration(); 334 }