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.cab.businessobject; 017 018 import java.util.ArrayList; 019 import java.util.HashMap; 020 import java.util.LinkedHashMap; 021 import java.util.List; 022 import java.util.Map; 023 024 import org.apache.commons.lang.StringUtils; 025 import org.kuali.kfs.module.cab.CabConstants; 026 import org.kuali.kfs.module.cab.CabPropertyConstants; 027 import org.kuali.kfs.module.purap.PurapPropertyConstants; 028 import org.kuali.kfs.module.purap.businessobject.CreditMemoStatus; 029 import org.kuali.kfs.module.purap.businessobject.PaymentRequestStatus; 030 import org.kuali.kfs.module.purap.document.PaymentRequestDocument; 031 import org.kuali.kfs.module.purap.document.VendorCreditMemoDocument; 032 import org.kuali.kfs.sys.businessobject.FinancialSystemDocumentHeader; 033 import org.kuali.kfs.sys.context.SpringContext; 034 import org.kuali.rice.kew.doctype.bo.DocumentTypeEBO; 035 import org.kuali.rice.kew.service.impl.KEWModuleService; 036 import org.kuali.rice.kns.bo.PersistableBusinessObjectBase; 037 import org.kuali.rice.kns.service.BusinessObjectService; 038 import org.kuali.rice.kns.util.ObjectUtils; 039 import org.kuali.rice.kns.util.TypedArrayList; 040 041 /** 042 * @author Kuali Nervous System Team (kualidev@oncourse.iu.edu) 043 */ 044 public class PurchasingAccountsPayableDocument extends PersistableBusinessObjectBase { 045 046 private String documentNumber; 047 private Integer purapDocumentIdentifier; 048 private Integer purchaseOrderIdentifier; 049 private String documentTypeCode; 050 private String activityStatusCode; 051 052 // References 053 private DocumentTypeEBO financialSystemDocumentTypeCode; 054 private FinancialSystemDocumentHeader documentHeader; 055 private List<PurchasingAccountsPayableItemAsset> purchasingAccountsPayableItemAssets; 056 057 // non-persistent 058 private boolean active; 059 private String purApContactEmailAddress; 060 private String purApContactPhoneNumber; 061 private String statusDescription; 062 private String capitalAssetSystemTypeCodeFromPurAp; 063 064 public PurchasingAccountsPayableDocument() { 065 this.purchasingAccountsPayableItemAssets = new TypedArrayList(PurchasingAccountsPayableItemAsset.class); 066 } 067 068 069 /** 070 * Gets the capitalAssetSystemTypeCodeFromPurAp attribute. 071 * @return Returns the capitalAssetSystemTypeCodeFromPurAp. 072 */ 073 public String getCapitalAssetSystemTypeCodeFromPurAp() { 074 return capitalAssetSystemTypeCodeFromPurAp; 075 } 076 077 078 /** 079 * Sets the capitalAssetSystemTypeCodeFromPurAp attribute value. 080 * @param capitalAssetSystemTypeCodeFromPurAp The capitalAssetSystemTypeCodeFromPurAp to set. 081 */ 082 public void setCapitalAssetSystemTypeCodeFromPurAp(String capitalAssetSystemTypeCodeFromPurAp) { 083 this.capitalAssetSystemTypeCodeFromPurAp = capitalAssetSystemTypeCodeFromPurAp; 084 } 085 086 087 /** 088 * Gets the documentNumber attribute. 089 * 090 * @return Returns the documentNumber. 091 */ 092 public String getDocumentNumber() { 093 return documentNumber; 094 } 095 096 097 /** 098 * Sets the documentNumber attribute value. 099 * 100 * @param documentNumber The documentNumber to set. 101 */ 102 public void setDocumentNumber(String documentNumber) { 103 this.documentNumber = documentNumber; 104 } 105 106 107 /** 108 * Gets the purapDocumentIdentifier attribute. 109 * 110 * @return Returns the purapDocumentIdentifier. 111 */ 112 public Integer getPurapDocumentIdentifier() { 113 return purapDocumentIdentifier; 114 } 115 116 117 /** 118 * Sets the purapDocumentIdentifier attribute value. 119 * 120 * @param purapDocumentIdentifier The purapDocumentIdentifier to set. 121 */ 122 public void setPurapDocumentIdentifier(Integer purapDocumentIdentifier) { 123 this.purapDocumentIdentifier = purapDocumentIdentifier; 124 } 125 126 127 /** 128 * Gets the purchaseOrderIdentifier attribute. 129 * 130 * @return Returns the purchaseOrderIdentifier. 131 */ 132 public Integer getPurchaseOrderIdentifier() { 133 return purchaseOrderIdentifier; 134 } 135 136 137 /** 138 * Sets the purchaseOrderIdentifier attribute value. 139 * 140 * @param purchaseOrderIdentifier The purchaseOrderIdentifier to set. 141 */ 142 public void setPurchaseOrderIdentifier(Integer purchaseOrderIdentifier) { 143 this.purchaseOrderIdentifier = purchaseOrderIdentifier; 144 } 145 146 147 /** 148 * Gets the documentTypeCode attribute. 149 * 150 * @return Returns the documentTypeCode. 151 */ 152 public String getDocumentTypeCode() { 153 return documentTypeCode; 154 } 155 156 157 /** 158 * Sets the documentTypeCode attribute value. 159 * 160 * @param documentTypeCode The documentTypeCode to set. 161 */ 162 public void setDocumentTypeCode(String documentTypeCode) { 163 this.documentTypeCode = documentTypeCode; 164 } 165 166 167 /** 168 * Gets the active attribute. 169 * 170 * @return Returns the active. 171 */ 172 public boolean isActive() { 173 return CabConstants.ActivityStatusCode.NEW.equalsIgnoreCase(this.getActivityStatusCode()) || CabConstants.ActivityStatusCode.MODIFIED.equalsIgnoreCase(this.getActivityStatusCode()); 174 } 175 176 177 /** 178 * Gets the activityStatusCode attribute. 179 * 180 * @return Returns the activityStatusCode. 181 */ 182 public String getActivityStatusCode() { 183 return activityStatusCode; 184 } 185 186 187 /** 188 * Sets the activityStatusCode attribute value. 189 * 190 * @param activityStatusCode The activityStatusCode to set. 191 */ 192 public void setActivityStatusCode(String activityStatusCode) { 193 this.activityStatusCode = activityStatusCode; 194 } 195 196 197 /** 198 * Gets the financialSystemDocumentTypeCode attribute. 199 * 200 * @return Returns the financialSystemDocumentTypeCode. 201 */ 202 public DocumentTypeEBO getFinancialSystemDocumentTypeCode() { 203 return financialSystemDocumentTypeCode = SpringContext.getBean(KEWModuleService.class).retrieveExternalizableBusinessObjectIfNecessary(this, financialSystemDocumentTypeCode, "financialSystemDocumentTypeCode"); 204 } 205 206 /** 207 * Gets the documentHeader attribute. 208 * 209 * @return Returns the documentHeader. 210 */ 211 public FinancialSystemDocumentHeader getDocumentHeader() { 212 return documentHeader; 213 } 214 215 216 /** 217 * Sets the documentHeader attribute value. 218 * 219 * @param documentHeader The documentHeader to set. 220 */ 221 public void setDocumentHeader(FinancialSystemDocumentHeader documentHeader) { 222 this.documentHeader = documentHeader; 223 } 224 225 226 /** 227 * Gets the purchasingAccountsPayableItemAssets attribute. 228 * 229 * @return Returns the purchasingAccountsPayableItemAssets. 230 */ 231 public List<PurchasingAccountsPayableItemAsset> getPurchasingAccountsPayableItemAssets() { 232 return purchasingAccountsPayableItemAssets; 233 } 234 235 236 /** 237 * Sets the purchasingAccountsPayableItemAssets attribute value. 238 * 239 * @param purchasingAccountsPayableItemAssets The purchasingAccountsPayableItemAssets to set. 240 */ 241 public void setPurchasingAccountsPayableItemAssets(List<PurchasingAccountsPayableItemAsset> purchasingAccountsPayableItemAssets) { 242 this.purchasingAccountsPayableItemAssets = purchasingAccountsPayableItemAssets; 243 } 244 245 246 /** 247 * Gets the purApContactEmailAddress attribute. 248 * 249 * @return Returns the purApContactEmailAddress. 250 */ 251 public String getPurApContactEmailAddress() { 252 return purApContactEmailAddress; 253 } 254 255 256 /** 257 * Sets the purApContactEmailAddress attribute value. 258 * 259 * @param purApContactEmailAddress The purApContactEmailAddress to set. 260 */ 261 public void setPurApContactEmailAddress(String purApContactEmailAddress) { 262 this.purApContactEmailAddress = purApContactEmailAddress; 263 } 264 265 266 /** 267 * Gets the purApContactPhoneNumber attribute. 268 * 269 * @return Returns the purApContactPhoneNumber. 270 */ 271 public String getPurApContactPhoneNumber() { 272 return purApContactPhoneNumber; 273 } 274 275 276 /** 277 * Sets the purApContactPhoneNumber attribute value. 278 * 279 * @param purApContactPhoneNumber The purApContactPhoneNumber to set. 280 */ 281 public void setPurApContactPhoneNumber(String purApContactPhoneNumber) { 282 this.purApContactPhoneNumber = purApContactPhoneNumber; 283 } 284 285 286 /** 287 * Gets the statusDescription attribute. 288 * 289 * @return Returns the statusDescription. 290 */ 291 public String getStatusDescription() { 292 String statusCode; 293 294 if (StringUtils.isNotBlank(this.statusDescription)) { 295 return this.statusDescription; 296 } 297 else { 298 Map objectKeys = new HashMap(); 299 objectKeys.put(CabPropertyConstants.PurchasingAccountsPayableDocument.PURAP_DOCUMENT_IDENTIFIER, this.getPurapDocumentIdentifier()); 300 301 if (CabConstants.PREQ.equals(this.documentTypeCode)) { 302 303 PaymentRequestDocument paymentRequestDocument = (PaymentRequestDocument) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(PaymentRequestDocument.class, objectKeys); 304 if (ObjectUtils.isNotNull(paymentRequestDocument)) { 305 statusCode = paymentRequestDocument.getStatusCode(); 306 307 objectKeys = new HashMap(); 308 objectKeys.put(PurapPropertyConstants.STATUS_CODE, statusCode); 309 PaymentRequestStatus paymentRequestStatus = (PaymentRequestStatus) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(PaymentRequestStatus.class, objectKeys); 310 if (ObjectUtils.isNotNull(paymentRequestStatus)) { 311 statusDescription = paymentRequestStatus.getStatusDescription(); 312 } 313 } 314 } 315 else { 316 VendorCreditMemoDocument vendorCreditMemoDocument = (VendorCreditMemoDocument) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(VendorCreditMemoDocument.class, objectKeys); 317 if (ObjectUtils.isNotNull(vendorCreditMemoDocument)) { 318 statusCode = vendorCreditMemoDocument.getStatusCode(); 319 320 objectKeys = new HashMap(); 321 objectKeys.put(PurapPropertyConstants.STATUS_CODE, statusCode); 322 CreditMemoStatus creditMemoStatus = (CreditMemoStatus) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(CreditMemoStatus.class, objectKeys); 323 if (ObjectUtils.isNotNull(creditMemoStatus)) { 324 statusDescription = creditMemoStatus.getStatusDescription(); 325 } 326 } 327 } 328 } 329 330 return statusDescription; 331 } 332 333 334 /** 335 * Sets the statusDescription attribute value. 336 * 337 * @param statusDescription The statusDescription to set. 338 */ 339 public void setStatusDescription(String statusDescription) { 340 this.statusDescription = statusDescription; 341 } 342 343 344 /** 345 * Need to override this method, so we can save item assets, the framework can delete the allocated item assets. 346 * 347 * @see org.kuali.rice.kns.bo.PersistableBusinessObjectBase#buildListOfDeletionAwareLists() 348 */ 349 @Override 350 public List buildListOfDeletionAwareLists() { 351 List<List> managedLists = new ArrayList<List>(); 352 353 managedLists.add(getPurchasingAccountsPayableItemAssets()); 354 return managedLists; 355 } 356 357 /** 358 * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper() 359 */ 360 protected LinkedHashMap toStringMapper() { 361 LinkedHashMap m = new LinkedHashMap(); 362 m.put("documentNumber", this.documentNumber); 363 return m; 364 } 365 366 public PurchasingAccountsPayableItemAsset getPurchasingAccountsPayableItemAsset(int index) { 367 int size = getPurchasingAccountsPayableItemAssets().size(); 368 while (size <= index || getPurchasingAccountsPayableItemAssets().get(index) == null) { 369 getPurchasingAccountsPayableItemAssets().add(size++, new PurchasingAccountsPayableItemAsset()); 370 } 371 return (PurchasingAccountsPayableItemAsset) getPurchasingAccountsPayableItemAssets().get(index); 372 373 } 374 375 }