/* * The Kuali Financial System, a comprehensive financial management system for higher education. * * Copyright 2005-2014 The Kuali Foundation * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package org.kuali.kfs.module.cab.businessobject; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedHashMap; import java.util.List; import java.util.Map; import org.apache.commons.lang.StringUtils; import org.kuali.kfs.module.cab.CabConstants; import org.kuali.kfs.module.cab.CabPropertyConstants; import org.kuali.kfs.module.purap.document.PaymentRequestDocument; import org.kuali.kfs.module.purap.document.VendorCreditMemoDocument; import org.kuali.kfs.sys.businessobject.FinancialSystemDocumentHeader; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.rice.kew.api.KewApiServiceLocator; import org.kuali.rice.kew.api.doctype.DocumentType; import org.kuali.rice.kew.doctype.bo.DocumentTypeEBO; import org.kuali.rice.krad.bo.PersistableBusinessObjectBase; import org.kuali.rice.krad.service.BusinessObjectService; import org.kuali.rice.krad.util.ObjectUtils; /** * @author Kuali Nervous System Team (kualidev@oncourse.iu.edu) */ public class PurchasingAccountsPayableDocument extends PersistableBusinessObjectBase { private String documentNumber; private Integer purapDocumentIdentifier; private Integer purchaseOrderIdentifier; private String documentTypeCode; private String activityStatusCode; // References private DocumentTypeEBO financialSystemDocumentTypeCode; private FinancialSystemDocumentHeader documentHeader; private List<PurchasingAccountsPayableItemAsset> purchasingAccountsPayableItemAssets; // non-persistent private boolean active; private String purApContactEmailAddress; private String purApContactPhoneNumber; private String statusDescription; private String capitalAssetSystemTypeCodeFromPurAp; public PurchasingAccountsPayableDocument() { this.purchasingAccountsPayableItemAssets = new ArrayList<PurchasingAccountsPayableItemAsset>(); } /** * Gets the capitalAssetSystemTypeCodeFromPurAp attribute. * @return Returns the capitalAssetSystemTypeCodeFromPurAp. */ public String getCapitalAssetSystemTypeCodeFromPurAp() { return capitalAssetSystemTypeCodeFromPurAp; } /** * Sets the capitalAssetSystemTypeCodeFromPurAp attribute value. * @param capitalAssetSystemTypeCodeFromPurAp The capitalAssetSystemTypeCodeFromPurAp to set. */ public void setCapitalAssetSystemTypeCodeFromPurAp(String capitalAssetSystemTypeCodeFromPurAp) { this.capitalAssetSystemTypeCodeFromPurAp = capitalAssetSystemTypeCodeFromPurAp; } /** * Gets the documentNumber attribute. * * @return Returns the documentNumber. */ public String getDocumentNumber() { return documentNumber; } /** * Sets the documentNumber attribute value. * * @param documentNumber The documentNumber to set. */ public void setDocumentNumber(String documentNumber) { this.documentNumber = documentNumber; } /** * Gets the purapDocumentIdentifier attribute. * * @return Returns the purapDocumentIdentifier. */ public Integer getPurapDocumentIdentifier() { return purapDocumentIdentifier; } /** * Sets the purapDocumentIdentifier attribute value. * * @param purapDocumentIdentifier The purapDocumentIdentifier to set. */ public void setPurapDocumentIdentifier(Integer purapDocumentIdentifier) { this.purapDocumentIdentifier = purapDocumentIdentifier; } /** * Gets the purchaseOrderIdentifier attribute. * * @return Returns the purchaseOrderIdentifier. */ public Integer getPurchaseOrderIdentifier() { return purchaseOrderIdentifier; } /** * Sets the purchaseOrderIdentifier attribute value. * * @param purchaseOrderIdentifier The purchaseOrderIdentifier to set. */ public void setPurchaseOrderIdentifier(Integer purchaseOrderIdentifier) { this.purchaseOrderIdentifier = purchaseOrderIdentifier; } /** * Gets the documentTypeCode attribute. * * @return Returns the documentTypeCode. */ public String getDocumentTypeCode() { return documentTypeCode; } /** * Sets the documentTypeCode attribute value. * * @param documentTypeCode The documentTypeCode to set. */ public void setDocumentTypeCode(String documentTypeCode) { this.documentTypeCode = documentTypeCode; } /** * Gets the active attribute. * * @return Returns the active. */ public boolean isActive() { return CabConstants.ActivityStatusCode.NEW.equalsIgnoreCase(this.getActivityStatusCode()) || CabConstants.ActivityStatusCode.MODIFIED.equalsIgnoreCase(this.getActivityStatusCode()); } /** * Gets the activityStatusCode attribute. * * @return Returns the activityStatusCode. */ public String getActivityStatusCode() { return activityStatusCode; } /** * Sets the activityStatusCode attribute value. * * @param activityStatusCode The activityStatusCode to set. */ public void setActivityStatusCode(String activityStatusCode) { this.activityStatusCode = activityStatusCode; } /** * Gets the financialSystemDocumentTypeCode attribute. * * @return Returns the financialSystemDocumentTypeCode. */ public DocumentTypeEBO getFinancialSystemDocumentTypeCode() { if ( financialSystemDocumentTypeCode == null || !StringUtils.equals(financialSystemDocumentTypeCode.getName(), documentTypeCode) ) { financialSystemDocumentTypeCode = null; if ( StringUtils.isNotBlank(documentTypeCode) ) { DocumentType docType = KewApiServiceLocator.getDocumentTypeService().getDocumentTypeByName(documentTypeCode); if ( docType != null ) { financialSystemDocumentTypeCode = org.kuali.rice.kew.doctype.bo.DocumentType.from(docType); } } } return financialSystemDocumentTypeCode; } /** * Gets the documentHeader attribute. * * @return Returns the documentHeader. */ public FinancialSystemDocumentHeader getDocumentHeader() { return documentHeader; } /** * Sets the documentHeader attribute value. * * @param documentHeader The documentHeader to set. */ public void setDocumentHeader(FinancialSystemDocumentHeader documentHeader) { this.documentHeader = documentHeader; } /** * Gets the purchasingAccountsPayableItemAssets attribute. * * @return Returns the purchasingAccountsPayableItemAssets. */ public List<PurchasingAccountsPayableItemAsset> getPurchasingAccountsPayableItemAssets() { return purchasingAccountsPayableItemAssets; } /** * Sets the purchasingAccountsPayableItemAssets attribute value. * * @param purchasingAccountsPayableItemAssets The purchasingAccountsPayableItemAssets to set. */ public void setPurchasingAccountsPayableItemAssets(List<PurchasingAccountsPayableItemAsset> purchasingAccountsPayableItemAssets) { this.purchasingAccountsPayableItemAssets = purchasingAccountsPayableItemAssets; } /** * Gets the purApContactEmailAddress attribute. * * @return Returns the purApContactEmailAddress. */ public String getPurApContactEmailAddress() { return purApContactEmailAddress; } /** * Sets the purApContactEmailAddress attribute value. * * @param purApContactEmailAddress The purApContactEmailAddress to set. */ public void setPurApContactEmailAddress(String purApContactEmailAddress) { this.purApContactEmailAddress = purApContactEmailAddress; } /** * Gets the purApContactPhoneNumber attribute. * * @return Returns the purApContactPhoneNumber. */ public String getPurApContactPhoneNumber() { return purApContactPhoneNumber; } /** * Sets the purApContactPhoneNumber attribute value. * * @param purApContactPhoneNumber The purApContactPhoneNumber to set. */ public void setPurApContactPhoneNumber(String purApContactPhoneNumber) { this.purApContactPhoneNumber = purApContactPhoneNumber; } /** * Gets the statusDescription attribute. * * @return Returns the statusDescription. */ public String getStatusDescription() { String statusCode; if (StringUtils.isNotBlank(this.statusDescription)) { return this.statusDescription; } else { Map objectKeys = new HashMap(); objectKeys.put(CabPropertyConstants.PurchasingAccountsPayableDocument.PURAP_DOCUMENT_IDENTIFIER, this.getPurapDocumentIdentifier()); if (CabConstants.PREQ.equals(this.documentTypeCode)) { PaymentRequestDocument paymentRequestDocument = (PaymentRequestDocument) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(PaymentRequestDocument.class, objectKeys); if (ObjectUtils.isNotNull(paymentRequestDocument)) { statusDescription = paymentRequestDocument.getApplicationDocumentStatus(); } } else { VendorCreditMemoDocument vendorCreditMemoDocument = (VendorCreditMemoDocument) SpringContext.getBean(BusinessObjectService.class).findByPrimaryKey(VendorCreditMemoDocument.class, objectKeys); if (ObjectUtils.isNotNull(vendorCreditMemoDocument)) { statusDescription = vendorCreditMemoDocument.getApplicationDocumentStatus(); } } } return statusDescription; } /** * Sets the statusDescription attribute value. * * @param statusDescription The statusDescription to set. */ public void setStatusDescription(String statusDescription) { this.statusDescription = statusDescription; } /** * Need to override this method, so we can save item assets, the framework can delete the allocated item assets. * * @see org.kuali.rice.krad.bo.PersistableBusinessObjectBase#buildListOfDeletionAwareLists() */ @Override public List buildListOfDeletionAwareLists() { List<List> managedLists = new ArrayList<List>(); managedLists.add(getPurchasingAccountsPayableItemAssets()); return managedLists; } /** * @see org.kuali.rice.krad.bo.BusinessObjectBase#toStringMapper() */ protected LinkedHashMap toStringMapper_RICE20_REFACTORME() { LinkedHashMap m = new LinkedHashMap(); m.put("documentNumber", this.documentNumber); return m; } public PurchasingAccountsPayableItemAsset getPurchasingAccountsPayableItemAsset(int index) { int size = getPurchasingAccountsPayableItemAssets().size(); while (size <= index || getPurchasingAccountsPayableItemAssets().get(index) == null) { getPurchasingAccountsPayableItemAssets().add(size++, new PurchasingAccountsPayableItemAsset()); } return getPurchasingAccountsPayableItemAssets().get(index); } }