/*
* 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.purap.document;
import java.sql.Date;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.apache.commons.lang.StringUtils;
import org.kuali.kfs.coa.businessobject.Account;
import org.kuali.kfs.coa.businessobject.Chart;
import org.kuali.kfs.coa.businessobject.Organization;
import org.kuali.kfs.integration.purap.CapitalAssetSystem;
import org.kuali.kfs.integration.purap.ItemCapitalAsset;
import org.kuali.kfs.module.purap.PurapConstants;
import org.kuali.kfs.module.purap.PurapParameterConstants;
import org.kuali.kfs.module.purap.PurapPropertyConstants;
import org.kuali.kfs.module.purap.businessobject.BillingAddress;
import org.kuali.kfs.module.purap.businessobject.CapitalAssetSystemState;
import org.kuali.kfs.module.purap.businessobject.CapitalAssetSystemType;
import org.kuali.kfs.module.purap.businessobject.DeliveryRequiredDateReason;
import org.kuali.kfs.module.purap.businessobject.FundingSource;
import org.kuali.kfs.module.purap.businessobject.PurApItem;
import org.kuali.kfs.module.purap.businessobject.PurchaseOrderTransmissionMethod;
import org.kuali.kfs.module.purap.businessobject.PurchasingCapitalAssetItem;
import org.kuali.kfs.module.purap.businessobject.PurchasingItem;
import org.kuali.kfs.module.purap.businessobject.PurchasingItemBase;
import org.kuali.kfs.module.purap.businessobject.ReceivingAddress;
import org.kuali.kfs.module.purap.businessobject.RecurringPaymentType;
import org.kuali.kfs.module.purap.businessobject.RequisitionSource;
import org.kuali.kfs.module.purap.document.service.PurapService;
import org.kuali.kfs.module.purap.document.service.PurchasingDocumentSpecificService;
import org.kuali.kfs.module.purap.document.service.PurchasingService;
import org.kuali.kfs.module.purap.document.service.ReceivingAddressService;
import org.kuali.kfs.module.purap.util.ItemParser;
import org.kuali.kfs.module.purap.util.ItemParserBase;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.kfs.sys.service.impl.KfsParameterConstants;
import org.kuali.kfs.vnd.VendorPropertyConstants;
import org.kuali.kfs.vnd.businessobject.CampusParameter;
import org.kuali.kfs.vnd.businessobject.CommodityCode;
import org.kuali.kfs.vnd.businessobject.PurchaseOrderCostSource;
import org.kuali.kfs.vnd.businessobject.VendorAddress;
import org.kuali.kfs.vnd.businessobject.VendorContract;
import org.kuali.kfs.vnd.businessobject.VendorDetail;
import org.kuali.kfs.vnd.document.service.VendorService;
import org.kuali.rice.core.api.datetime.DateTimeService;
import org.kuali.rice.core.api.util.type.KualiDecimal;
import org.kuali.rice.coreservice.framework.parameter.ParameterService;
import org.kuali.rice.krad.rules.rule.event.ApproveDocumentEvent;
import org.kuali.rice.krad.rules.rule.event.KualiDocumentEvent;
import org.kuali.rice.krad.rules.rule.event.RouteDocumentEvent;
import org.kuali.rice.krad.util.GlobalVariables;
import org.kuali.rice.krad.util.ObjectUtils;
import org.kuali.rice.location.api.country.Country;
import org.kuali.rice.location.api.country.CountryService;
/**
* Base class for Purchasing Documents.
*/
public abstract class PurchasingDocumentBase extends PurchasingAccountsPayableDocumentBase implements PurchasingDocument {
protected static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(PurchasingDocumentBase.class);
// SHARED FIELDS BETWEEN REQUISITION AND PURCHASE ORDER
protected String documentFundingSourceCode;
protected String requisitionSourceCode;
protected String purchaseOrderTransmissionMethodCode;
protected String purchaseOrderCostSourceCode;
protected String deliveryRequiredDateReasonCode;
protected String recurringPaymentTypeCode;
protected String chartOfAccountsCode;
protected String organizationCode;
protected String deliveryCampusCode;
protected KualiDecimal purchaseOrderTotalLimit;
protected Boolean vendorRestrictedIndicator;
protected String vendorPhoneNumber;
protected String vendorFaxNumber;
protected Integer vendorContractGeneratedIdentifier;
protected String vendorNoteText;
protected String requestorPersonName;
protected String requestorPersonEmailAddress;
protected String requestorPersonPhoneNumber;
protected String nonInstitutionFundOrgChartOfAccountsCode;
protected String nonInstitutionFundOrganizationCode;
protected String nonInstitutionFundChartOfAccountsCode;
protected String nonInstitutionFundAccountNumber;
protected boolean deliveryBuildingOtherIndicator;
protected String deliveryBuildingCode;
protected String deliveryBuildingName;
protected String deliveryBuildingRoomNumber;
protected String deliveryBuildingLine1Address;
protected String deliveryBuildingLine2Address;
protected String deliveryCityName;
protected String deliveryStateCode;
protected String deliveryPostalCode;
protected String deliveryCountryCode;
protected String deliveryToName;
protected String deliveryToEmailAddress;
protected String deliveryToPhoneNumber;
protected Date deliveryRequiredDate;
protected String deliveryInstructionText;
protected Date purchaseOrderBeginDate;
protected Date purchaseOrderEndDate;
protected String institutionContactName;
protected String institutionContactPhoneNumber;
protected String institutionContactEmailAddress;
protected String billingName;
protected String billingLine1Address;
protected String billingLine2Address;
protected String billingCityName;
protected String billingStateCode;
protected String billingPostalCode;
protected String billingCountryCode;
protected String billingPhoneNumber;
protected String billingEmailAddress;
protected String receivingName;
protected String receivingLine1Address;
protected String receivingLine2Address;
protected String receivingCityName;
protected String receivingStateCode;
protected String receivingPostalCode;
protected String receivingCountryCode;
protected boolean addressToVendorIndicator; // if true, use receiving address
protected String externalOrganizationB2bSupplierIdentifier;
protected boolean purchaseOrderAutomaticIndicator;
protected String vendorPaymentTermsCode;
protected String vendorShippingTitleCode;
protected String vendorShippingPaymentTermsCode;
protected String capitalAssetSystemTypeCode;
protected String capitalAssetSystemStateCode;
protected String justification;
// NOT PERSISTED IN DB
protected String supplierDiversityLabel;
protected String vendorContactsLabel;
// REFERENCE OBJECTS
protected FundingSource fundingSource;
protected RequisitionSource requisitionSource;
protected PurchaseOrderTransmissionMethod purchaseOrderTransmissionMethod;
protected PurchaseOrderCostSource purchaseOrderCostSource;
protected DeliveryRequiredDateReason deliveryRequiredDateReason;
protected RecurringPaymentType recurringPaymentType;
protected Organization organization;
protected Chart chartOfAccounts;
protected CampusParameter deliveryCampus;
protected Chart nonInstitutionFundOrgChartOfAccounts;
protected Organization nonInstitutionFundOrganization;
protected Account nonInstitutionFundAccount;
protected Chart nonInstitutionFundChartOfAccounts;
protected VendorContract vendorContract;
protected CapitalAssetSystemType capitalAssetSystemType;
protected CapitalAssetSystemState capitalAssetSystemState;
protected List<CapitalAssetSystem> purchasingCapitalAssetSystems;
protected List<PurchasingCapitalAssetItem> purchasingCapitalAssetItems;
protected boolean receivingDocumentRequiredIndicator;
protected boolean paymentRequestPositiveApprovalIndicator;
protected List<CommodityCode> commodityCodesForRouting;
/**
* Default Constructor.
*/
public PurchasingDocumentBase() {
super();
purchasingCapitalAssetItems = new ArrayList();
purchasingCapitalAssetSystems = new ArrayList();
}
@Override
public abstract PurchasingDocumentSpecificService getDocumentSpecificService();
/**
* @see org.kuali.kfs.module.purap.document.PurchasingDocument#templateVendorDetail(org.kuali.kfs.vnd.businessobject.VendorDetail)
*/
@Override
public void templateVendorDetail(VendorDetail vendorDetail) {
if (ObjectUtils.isNotNull(vendorDetail)) {
this.setVendorDetail(vendorDetail);
this.setVendorName(vendorDetail.getVendorName());
this.setVendorShippingTitleCode(vendorDetail.getVendorShippingTitleCode());
this.setVendorPaymentTermsCode(vendorDetail.getVendorPaymentTermsCode());
this.setVendorShippingPaymentTermsCode(vendorDetail.getVendorShippingPaymentTermsCode());
this.setVendorCustomerNumber("");
}
}
/**
* @see org.kuali.kfs.module.purap.document.PurchasingDocument#templateVendorContract(org.kuali.kfs.vnd.businessobject.VendorContract)
*/
@Override
public void templateVendorContract(VendorContract vendorContract) {
if (ObjectUtils.isNotNull(vendorContract)) {
this.setVendorContract(vendorContract);
this.setVendorContractGeneratedIdentifier(vendorContract.getVendorContractGeneratedIdentifier());
this.setVendorShippingTitleCode(vendorContract.getVendorShippingTitleCode());
this.setVendorPaymentTermsCode(vendorContract.getVendorPaymentTermsCode());
this.setVendorShippingPaymentTermsCode(vendorContract.getVendorShippingPaymentTermsCode());
this.setPurchaseOrderCostSourceCode(vendorContract.getPurchaseOrderCostSourceCode());
}
}
/**
* @see org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocumentBase#templateVendorAddress(org.kuali.kfs.vnd.businessobject.VendorAddress)
*/
@Override
public void templateVendorAddress(VendorAddress vendorAddress) {
super.templateVendorAddress(vendorAddress);
if (vendorAddress != null) {
this.setVendorFaxNumber(vendorAddress.getVendorFaxNumber());
this.setVendorAttentionName(vendorAddress.getVendorAttentionName());
}
}
/**
* @see org.kuali.kfs.module.purap.document.PurchasingDocumentBase#templateBillingAddress(org.kuali.kfs.module.purap.businessobject.BillingAddress).
*/
@Override
public void templateBillingAddress(BillingAddress billingAddress) {
if (ObjectUtils.isNotNull(billingAddress)) {
this.setBillingName(billingAddress.getBillingName());
this.setBillingLine1Address(billingAddress.getBillingLine1Address());
this.setBillingLine2Address(billingAddress.getBillingLine2Address());
this.setBillingCityName(billingAddress.getBillingCityName());
this.setBillingStateCode(billingAddress.getBillingStateCode());
this.setBillingPostalCode(billingAddress.getBillingPostalCode());
this.setBillingCountryCode(billingAddress.getBillingCountryCode());
this.setBillingPhoneNumber(billingAddress.getBillingPhoneNumber());
this.setBillingEmailAddress(billingAddress.getBillingEmailAddress());
}
}
/**
* @see org.kuali.kfs.module.purap.document.PurchasingDocumentBase#templateReceivingAddress(org.kuali.kfs.module.purap.businessobject.ReceivingAddress).
*/
@Override
public void templateReceivingAddress(ReceivingAddress receivingAddress) {
if (receivingAddress != null) {
this.setReceivingName(receivingAddress.getReceivingName());
this.setReceivingLine1Address(receivingAddress.getReceivingLine1Address());
this.setReceivingLine2Address(receivingAddress.getReceivingLine2Address());
this.setReceivingCityName(receivingAddress.getReceivingCityName());
this.setReceivingStateCode(receivingAddress.getReceivingStateCode());
this.setReceivingPostalCode(receivingAddress.getReceivingPostalCode());
this.setReceivingCountryCode(receivingAddress.getReceivingCountryCode());
this.setAddressToVendorIndicator(receivingAddress.isUseReceivingIndicator());
}
else {
this.setReceivingName(null);
this.setReceivingLine1Address(null);
this.setReceivingLine2Address(null);
this.setReceivingCityName(null);
this.setReceivingStateCode(null);
this.setReceivingPostalCode(null);
this.setReceivingCountryCode(null);
this.setAddressToVendorIndicator(false);
}
}
/**
* Loads the default receiving address from database corresponding to the chart/org of this document.
*/
@Override
public void loadReceivingAddress() {
/*
Map criteria = new HashMap();
criteria.put(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE, this.getChartOfAccountsCode());
criteria.put(KFSPropertyConstants.ORGANIZATION_CODE, this.getOrganizationCode());
criteria.put(PurapPropertyConstants.RCVNG_ADDR_DFLT_IND, true);
criteria.put(PurapPropertyConstants.RCVNG_ADDR_ACTIVE, true);
List<ReceivingAddress> addresses = (List)SpringContext.getBean(BusinessObjectService.class).findMatching(ReceivingAddress.class, criteria);
if (addresses != null && addresses.size()>0 )
this.templateReceivingAddress(addresses.get(0));
else // if no address is found, fill with null
this.templateReceivingAddress(null);
*/
String chartCode = getChartOfAccountsCode();
String orgCode = getOrganizationCode();
ReceivingAddress address = SpringContext.getBean(ReceivingAddressService.class).findUniqueDefaultByChartOrg(chartCode, orgCode);
// if default address for chart/org not found, look for chart default
if (address == null && orgCode != null) {
address = SpringContext.getBean(ReceivingAddressService.class).findUniqueDefaultByChartOrg(chartCode, null);
}
this.templateReceivingAddress(address);
}
/**
* Iterates through the purchasingCapitalAssetItems of the document and returns the purchasingCapitalAssetItem with the item id equal to the number given, or null if a
* match is not found.
*
* @param itemIdentifier item id to match on.
* @return the PurchasingCapitalAssetItem if a match is found, else null.
*/
public PurchasingCapitalAssetItem getPurchasingCapitalAssetItemByItemIdentifier(int itemIdentifier) {
for (Iterator iter = purchasingCapitalAssetItems.iterator(); iter.hasNext();) {
PurchasingCapitalAssetItem camsItem = (PurchasingCapitalAssetItem) iter.next();
if (camsItem.getItemIdentifier().intValue() == itemIdentifier) {
return camsItem;
}
}
return null;
}
/**
* @see org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocumentBase#addItem(org.kuali.kfs.module.purap.businessobject.PurApItem)
*/
@Override
public void addItem(PurApItem item) {
item.refreshReferenceObject(PurapPropertyConstants.COMMODITY_CODE);
super.addItem(item);
}
/**
* @see org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocument#deleteItem(int lineNum)
*/
@Override
public void deleteItem(int lineNum) {
// remove associated asset items
PurApItem item = items.get(lineNum);
if (ObjectUtils.isNotNull(item) && item.getItemIdentifier() != null) {
PurchasingCapitalAssetItem purchasingCapitalAssetItem = getPurchasingCapitalAssetItemByItemIdentifier(item.getItemIdentifier());
if (ObjectUtils.isNotNull(purchasingCapitalAssetItem)) {
getPurchasingCapitalAssetItems().remove(purchasingCapitalAssetItem);
}
// no more capital asset items, clear cap asset fields
if (getPurchasingCapitalAssetItems().size() == 0) {
clearCapitalAssetFields();
}
}
super.deleteItem(lineNum);
}
/**
* @see org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocumentBase#populateDocumentForRouting()
*/
@Override
public void populateDocumentForRouting() {
commodityCodesForRouting = new ArrayList<CommodityCode>();
for (PurchasingItemBase item : (List<PurchasingItemBase>)this.getItems()) {
if (item.getCommodityCode() != null && !commodityCodesForRouting.contains(item.getCommodityCode())) {
commodityCodesForRouting.add(item.getCommodityCode());
}
}
super.populateDocumentForRouting();
}
// GETTERS AND SETTERS
/**
* @see org.kuali.kfs.module.purap.document.PurchasingDocument.getItemParser().
*/
@Override
public ItemParser getItemParser() {
return new ItemParserBase();
}
/**
* Decides whether receivingDocumentRequiredIndicator functionality shall be enabled according to the controlling parameter.
*/
public boolean isEnableReceivingDocumentRequiredIndicator() {
return SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapParameterConstants.RECEIVING_DOCUMENT_REQUIRED_IND);
}
/**
* Decides whether paymentRequestPositiveApprovalIndicator functionality shall be enabled according to the controlling parameter.
*/
public boolean isEnablePaymentRequestPositiveApprovalIndicator() {
return SpringContext.getBean(ParameterService.class).getParameterValueAsBoolean(KfsParameterConstants.PURCHASING_DOCUMENT.class, PurapParameterConstants.PAYMENT_REQUEST_POSITIVE_APPROVAL_IND);
}
@Override
public String getBillingCityName() {
return billingCityName;
}
@Override
public void setBillingCityName(String billingCityName) {
this.billingCityName = billingCityName;
}
@Override
public String getBillingCountryCode() {
return billingCountryCode;
}
@Override
public void setBillingCountryCode(String billingCountryCode) {
this.billingCountryCode = billingCountryCode;
}
@Override
public String getBillingCountryName() {
if ( StringUtils.isNotBlank(getBillingCountryCode()) ) {
Country country = SpringContext.getBean(CountryService.class).getCountry(getBillingCountryCode());
if (country != null) {
return country.getName();
}
}
return null;
}
@Override
public String getBillingLine1Address() {
return billingLine1Address;
}
@Override
public void setBillingLine1Address(String billingLine1Address) {
this.billingLine1Address = billingLine1Address;
}
@Override
public String getBillingLine2Address() {
return billingLine2Address;
}
@Override
public void setBillingLine2Address(String billingLine2Address) {
this.billingLine2Address = billingLine2Address;
}
@Override
public String getBillingName() {
return billingName;
}
@Override
public void setBillingName(String billingName) {
this.billingName = billingName;
}
@Override
public String getBillingPhoneNumber() {
return billingPhoneNumber;
}
@Override
public void setBillingPhoneNumber(String billingPhoneNumber) {
this.billingPhoneNumber = billingPhoneNumber;
}
public String getBillingEmailAddress() {
return billingEmailAddress;
}
public void setBillingEmailAddress(String billingEmailAddress) {
this.billingEmailAddress = billingEmailAddress;
}
@Override
public String getBillingPostalCode() {
return billingPostalCode;
}
@Override
public void setBillingPostalCode(String billingPostalCode) {
this.billingPostalCode = billingPostalCode;
}
@Override
public String getBillingStateCode() {
return billingStateCode;
}
@Override
public void setBillingStateCode(String billingStateCode) {
this.billingStateCode = billingStateCode;
}
@Override
public String getReceivingCityName() {
return receivingCityName;
}
@Override
public void setReceivingCityName(String receivingCityName) {
this.receivingCityName = receivingCityName;
}
@Override
public String getReceivingCountryCode() {
return receivingCountryCode;
}
@Override
public void setReceivingCountryCode(String receivingCountryCode) {
this.receivingCountryCode = receivingCountryCode;
}
@Override
public String getReceivingCountryName() {
if ( StringUtils.isNotBlank(getReceivingCountryCode()) ) {
Country country = SpringContext.getBean(CountryService.class).getCountry(getReceivingCountryCode());
if (country != null) {
return country.getName();
}
}
return null;
}
@Override
public String getReceivingLine1Address() {
return receivingLine1Address;
}
@Override
public void setReceivingLine1Address(String receivingLine1Address) {
this.receivingLine1Address = receivingLine1Address;
}
@Override
public String getReceivingLine2Address() {
return receivingLine2Address;
}
@Override
public void setReceivingLine2Address(String receivingLine2Address) {
this.receivingLine2Address = receivingLine2Address;
}
@Override
public String getReceivingName() {
return receivingName;
}
@Override
public void setReceivingName(String receivingName) {
this.receivingName = receivingName;
}
@Override
public String getReceivingPostalCode() {
return receivingPostalCode;
}
@Override
public void setReceivingPostalCode(String receivingPostalCode) {
this.receivingPostalCode = receivingPostalCode;
}
@Override
public String getReceivingStateCode() {
return receivingStateCode;
}
@Override
public void setReceivingStateCode(String receivingStateCode) {
this.receivingStateCode = receivingStateCode;
}
@Override
public boolean getAddressToVendorIndicator() {
return addressToVendorIndicator;
}
@Override
public void setAddressToVendorIndicator(boolean addressToVendor) {
this.addressToVendorIndicator = addressToVendor;
}
@Override
public String getChartOfAccountsCode() {
return chartOfAccountsCode;
}
@Override
public void setChartOfAccountsCode(String chartOfAccountsCode) {
this.chartOfAccountsCode = chartOfAccountsCode;
}
@Override
public String getDeliveryBuildingCode() {
return deliveryBuildingCode;
}
@Override
public void setDeliveryBuildingCode(String deliveryBuildingCode) {
this.deliveryBuildingCode = deliveryBuildingCode;
}
@Override
public String getDeliveryBuildingLine1Address() {
return deliveryBuildingLine1Address;
}
@Override
public void setDeliveryBuildingLine1Address(String deliveryBuildingLine1Address) {
this.deliveryBuildingLine1Address = deliveryBuildingLine1Address;
}
@Override
public String getDeliveryBuildingLine2Address() {
return deliveryBuildingLine2Address;
}
@Override
public void setDeliveryBuildingLine2Address(String deliveryBuildingLine2Address) {
this.deliveryBuildingLine2Address = deliveryBuildingLine2Address;
}
@Override
public String getDeliveryBuildingName() {
return deliveryBuildingName;
}
@Override
public void setDeliveryBuildingName(String deliveryBuildingName) {
this.deliveryBuildingName = deliveryBuildingName;
}
@Override
public boolean isDeliveryBuildingOtherIndicator() {
return deliveryBuildingOtherIndicator;
}
@Override
public void setDeliveryBuildingOtherIndicator(boolean deliveryBuildingOtherIndicator) {
this.deliveryBuildingOtherIndicator = deliveryBuildingOtherIndicator;
}
@Override
public String getDeliveryBuildingRoomNumber() {
return deliveryBuildingRoomNumber;
}
@Override
public void setDeliveryBuildingRoomNumber(String deliveryBuildingRoomNumber) {
this.deliveryBuildingRoomNumber = deliveryBuildingRoomNumber;
}
@Override
public String getDeliveryCampusCode() {
return deliveryCampusCode;
}
@Override
public void setDeliveryCampusCode(String deliveryCampusCode) {
this.deliveryCampusCode = deliveryCampusCode;
}
@Override
public String getDeliveryCityName() {
return deliveryCityName;
}
@Override
public void setDeliveryCityName(String deliveryCityName) {
this.deliveryCityName = deliveryCityName;
}
@Override
public String getDeliveryCountryCode() {
return deliveryCountryCode;
}
@Override
public String getDeliveryCountryName() {
if ( StringUtils.isNotBlank(getDeliveryCountryCode()) ) {
Country country = SpringContext.getBean(CountryService.class).getCountry(getDeliveryCountryCode());
if (country != null) {
return country.getName();
}
}
return null;
}
@Override
public void setDeliveryCountryCode(String deliveryCountryCode) {
this.deliveryCountryCode = deliveryCountryCode;
}
@Override
public String getDeliveryInstructionText() {
return deliveryInstructionText;
}
@Override
public void setDeliveryInstructionText(String deliveryInstructionText) {
this.deliveryInstructionText = deliveryInstructionText;
}
@Override
public String getDeliveryPostalCode() {
return deliveryPostalCode;
}
@Override
public void setDeliveryPostalCode(String deliveryPostalCode) {
this.deliveryPostalCode = deliveryPostalCode;
}
@Override
public Date getDeliveryRequiredDate() {
return deliveryRequiredDate;
}
@Override
public void setDeliveryRequiredDate(Date deliveryRequiredDate) {
this.deliveryRequiredDate = deliveryRequiredDate;
}
@Override
public String getDeliveryRequiredDateReasonCode() {
return deliveryRequiredDateReasonCode;
}
@Override
public void setDeliveryRequiredDateReasonCode(String deliveryRequiredDateReasonCode) {
this.deliveryRequiredDateReasonCode = deliveryRequiredDateReasonCode;
}
@Override
public String getDeliveryStateCode() {
return deliveryStateCode;
}
@Override
public void setDeliveryStateCode(String deliveryStateCode) {
this.deliveryStateCode = deliveryStateCode;
}
@Override
public String getDeliveryToEmailAddress() {
return deliveryToEmailAddress;
}
@Override
public void setDeliveryToEmailAddress(String deliveryToEmailAddress) {
this.deliveryToEmailAddress = deliveryToEmailAddress;
}
@Override
public String getDeliveryToName() {
return deliveryToName;
}
@Override
public void setDeliveryToName(String deliveryToName) {
this.deliveryToName = deliveryToName;
}
@Override
public String getDeliveryToPhoneNumber() {
return deliveryToPhoneNumber;
}
@Override
public void setDeliveryToPhoneNumber(String deliveryToPhoneNumber) {
this.deliveryToPhoneNumber = deliveryToPhoneNumber;
}
@Override
public String getExternalOrganizationB2bSupplierIdentifier() {
return externalOrganizationB2bSupplierIdentifier;
}
@Override
public void setExternalOrganizationB2bSupplierIdentifier(String externalOrganizationB2bSupplierIdentifier) {
this.externalOrganizationB2bSupplierIdentifier = externalOrganizationB2bSupplierIdentifier;
}
@Override
public String getDocumentFundingSourceCode() {
return documentFundingSourceCode;
}
@Override
public void setDocumentFundingSourceCode(String documentFundingSourceCode) {
this.documentFundingSourceCode = documentFundingSourceCode;
}
@Override
public String getInstitutionContactEmailAddress() {
return institutionContactEmailAddress;
}
@Override
public void setInstitutionContactEmailAddress(String institutionContactEmailAddress) {
this.institutionContactEmailAddress = institutionContactEmailAddress;
}
@Override
public String getInstitutionContactName() {
return institutionContactName;
}
@Override
public void setInstitutionContactName(String institutionContactName) {
this.institutionContactName = institutionContactName;
}
@Override
public String getInstitutionContactPhoneNumber() {
return institutionContactPhoneNumber;
}
@Override
public void setInstitutionContactPhoneNumber(String institutionContactPhoneNumber) {
this.institutionContactPhoneNumber = institutionContactPhoneNumber;
}
@Override
public String getNonInstitutionFundAccountNumber() {
return nonInstitutionFundAccountNumber;
}
@Override
public void setNonInstitutionFundAccountNumber(String nonInstitutionFundAccountNumber) {
this.nonInstitutionFundAccountNumber = nonInstitutionFundAccountNumber;
}
@Override
public String getNonInstitutionFundChartOfAccountsCode() {
return nonInstitutionFundChartOfAccountsCode;
}
@Override
public void setNonInstitutionFundChartOfAccountsCode(String nonInstitutionFundChartOfAccountsCode) {
this.nonInstitutionFundChartOfAccountsCode = nonInstitutionFundChartOfAccountsCode;
}
@Override
public String getNonInstitutionFundOrganizationCode() {
return nonInstitutionFundOrganizationCode;
}
@Override
public void setNonInstitutionFundOrganizationCode(String nonInstitutionFundOrganizationCode) {
this.nonInstitutionFundOrganizationCode = nonInstitutionFundOrganizationCode;
}
@Override
public String getNonInstitutionFundOrgChartOfAccountsCode() {
return nonInstitutionFundOrgChartOfAccountsCode;
}
@Override
public void setNonInstitutionFundOrgChartOfAccountsCode(String nonInstitutionFundOrgChartOfAccountsCode) {
this.nonInstitutionFundOrgChartOfAccountsCode = nonInstitutionFundOrgChartOfAccountsCode;
}
@Override
public String getOrganizationCode() {
return organizationCode;
}
@Override
public void setOrganizationCode(String organizationCode) {
this.organizationCode = organizationCode;
}
@Override
public boolean getPurchaseOrderAutomaticIndicator() {
return purchaseOrderAutomaticIndicator;
}
@Override
public void setPurchaseOrderAutomaticIndicator(boolean purchaseOrderAutomaticIndicator) {
this.purchaseOrderAutomaticIndicator = purchaseOrderAutomaticIndicator;
}
@Override
public Date getPurchaseOrderBeginDate() {
return purchaseOrderBeginDate;
}
@Override
public void setPurchaseOrderBeginDate(Date purchaseOrderBeginDate) {
this.purchaseOrderBeginDate = purchaseOrderBeginDate;
}
@Override
public String getPurchaseOrderCostSourceCode() {
return purchaseOrderCostSourceCode;
}
@Override
public void setPurchaseOrderCostSourceCode(String purchaseOrderCostSourceCode) {
this.purchaseOrderCostSourceCode = purchaseOrderCostSourceCode;
}
@Override
public Date getPurchaseOrderEndDate() {
return purchaseOrderEndDate;
}
@Override
public void setPurchaseOrderEndDate(Date purchaseOrderEndDate) {
this.purchaseOrderEndDate = purchaseOrderEndDate;
}
@Override
public KualiDecimal getPurchaseOrderTotalLimit() {
return purchaseOrderTotalLimit;
}
@Override
public void setPurchaseOrderTotalLimit(KualiDecimal purchaseOrderTotalLimit) {
this.purchaseOrderTotalLimit = purchaseOrderTotalLimit;
}
@Override
public String getPurchaseOrderTransmissionMethodCode() {
return purchaseOrderTransmissionMethodCode;
}
@Override
public void setPurchaseOrderTransmissionMethodCode(String purchaseOrderTransmissionMethodCode) {
this.purchaseOrderTransmissionMethodCode = purchaseOrderTransmissionMethodCode;
}
@Override
public String getRecurringPaymentTypeCode() {
return recurringPaymentTypeCode;
}
@Override
public void setRecurringPaymentTypeCode(String recurringPaymentTypeCode) {
this.recurringPaymentTypeCode = recurringPaymentTypeCode;
}
@Override
public String getRequestorPersonEmailAddress() {
return requestorPersonEmailAddress;
}
@Override
public void setRequestorPersonEmailAddress(String requestorPersonEmailAddress) {
this.requestorPersonEmailAddress = requestorPersonEmailAddress;
}
@Override
public String getRequestorPersonName() {
return requestorPersonName;
}
@Override
public void setRequestorPersonName(String requestorPersonName) {
this.requestorPersonName = requestorPersonName;
}
@Override
public String getRequestorPersonPhoneNumber() {
return requestorPersonPhoneNumber;
}
@Override
public void setRequestorPersonPhoneNumber(String requestorPersonPhoneNumber) {
this.requestorPersonPhoneNumber = requestorPersonPhoneNumber;
}
@Override
public String getRequisitionSourceCode() {
return requisitionSourceCode;
}
@Override
public void setRequisitionSourceCode(String requisitionSourceCode) {
this.requisitionSourceCode = requisitionSourceCode;
}
public String getVendorContactsLabel() {
return vendorContactsLabel;
}
public void setVendorContactsLabel(String vendorContactsLabel) {
this.vendorContactsLabel = vendorContactsLabel;
}
public VendorContract getVendorContract() {
if (ObjectUtils.isNull(vendorContract)) {
refreshReferenceObject(PurapPropertyConstants.VENDOR_CONTRACT);
}
return vendorContract;
}
public void setVendorContract(VendorContract vendorContract) {
this.vendorContract = vendorContract;
}
@Override
public Integer getVendorContractGeneratedIdentifier() {
return vendorContractGeneratedIdentifier;
}
@Override
public void setVendorContractGeneratedIdentifier(Integer vendorContractGeneratedIdentifier) {
this.vendorContractGeneratedIdentifier = vendorContractGeneratedIdentifier;
}
public String getVendorContractName() {
getVendorContract();
if (ObjectUtils.isNull(vendorContract)) {
return "";
}
else {
return vendorContract.getVendorContractName();
}
}
@Override
public String getVendorFaxNumber() {
return vendorFaxNumber;
}
@Override
public void setVendorFaxNumber(String vendorFaxNumber) {
this.vendorFaxNumber = vendorFaxNumber;
}
@Override
public String getVendorNoteText() {
return vendorNoteText;
}
@Override
public void setVendorNoteText(String vendorNoteText) {
this.vendorNoteText = vendorNoteText;
}
@Override
public String getVendorPaymentTermsCode() {
return vendorPaymentTermsCode;
}
@Override
public void setVendorPaymentTermsCode(String vendorPaymentTermsCode) {
this.vendorPaymentTermsCode = vendorPaymentTermsCode;
}
@Override
public String getVendorPhoneNumber() {
return vendorPhoneNumber;
}
@Override
public void setVendorPhoneNumber(String vendorPhoneNumber) {
this.vendorPhoneNumber = vendorPhoneNumber;
}
@Override
public Boolean getVendorRestrictedIndicator() {
return vendorRestrictedIndicator;
}
@Override
public void setVendorRestrictedIndicator(Boolean vendorRestrictedIndicator) {
this.vendorRestrictedIndicator = vendorRestrictedIndicator;
}
@Override
public String getVendorShippingPaymentTermsCode() {
return vendorShippingPaymentTermsCode;
}
@Override
public void setVendorShippingPaymentTermsCode(String vendorShippingPaymentTermsCode) {
this.vendorShippingPaymentTermsCode = vendorShippingPaymentTermsCode;
}
@Override
public String getVendorShippingTitleCode() {
return vendorShippingTitleCode;
}
@Override
public void setVendorShippingTitleCode(String vendorShippingTitleCode) {
this.vendorShippingTitleCode = vendorShippingTitleCode;
}
@Override
public Chart getChartOfAccounts() {
return chartOfAccounts;
}
@Override
public CampusParameter getDeliveryCampus() {
return deliveryCampus;
}
@Override
public DeliveryRequiredDateReason getDeliveryRequiredDateReason() {
return deliveryRequiredDateReason;
}
@Override
public FundingSource getFundingSource() {
return fundingSource;
}
@Override
public Account getNonInstitutionFundAccount() {
return nonInstitutionFundAccount;
}
@Override
public Chart getNonInstitutionFundChartOfAccounts() {
return nonInstitutionFundChartOfAccounts;
}
@Override
public Organization getNonInstitutionFundOrganization() {
return nonInstitutionFundOrganization;
}
@Override
public Chart getNonInstitutionFundOrgChartOfAccounts() {
return nonInstitutionFundOrgChartOfAccounts;
}
@Override
public Organization getOrganization() {
return organization;
}
@Override
public PurchaseOrderTransmissionMethod getPurchaseOrderTransmissionMethod() {
return purchaseOrderTransmissionMethod;
}
@Override
public RecurringPaymentType getRecurringPaymentType() {
return recurringPaymentType;
}
@Override
public RequisitionSource getRequisitionSource() {
return requisitionSource;
}
public String getSupplierDiversityLabel() {
return supplierDiversityLabel;
}
@Override
public PurchaseOrderCostSource getPurchaseOrderCostSource() {
if (ObjectUtils.isNull(purchaseOrderCostSource)) {
refreshReferenceObject(PurapPropertyConstants.PURCHASE_ORDER_COST_SOURCE);
}
return purchaseOrderCostSource;
}
/**
* @deprecated
*/
@Deprecated
@Override
public void setChartOfAccounts(Chart chartOfAccounts) {
this.chartOfAccounts = chartOfAccounts;
}
/**
* @deprecated
*/
@Deprecated
@Override
public void setDeliveryCampus(CampusParameter deliveryCampus) {
this.deliveryCampus = deliveryCampus;
}
/**
* @deprecated
*/
@Deprecated
@Override
public void setDeliveryRequiredDateReason(DeliveryRequiredDateReason deliveryRequiredDateReason) {
this.deliveryRequiredDateReason = deliveryRequiredDateReason;
}
/**
* @deprecated
*/
@Deprecated
@Override
public void setFundingSource(FundingSource fundingSource) {
this.fundingSource = fundingSource;
}
/**
* @deprecated
*/
@Deprecated
@Override
public void setNonInstitutionFundAccount(Account nonInstitutionFundAccount) {
this.nonInstitutionFundAccount = nonInstitutionFundAccount;
}
/**
* @deprecated
*/
@Deprecated
@Override
public void setNonInstitutionFundChartOfAccounts(Chart nonInstitutionFundChartOfAccounts) {
this.nonInstitutionFundChartOfAccounts = nonInstitutionFundChartOfAccounts;
}
/**
* @deprecated
*/
@Deprecated
@Override
public void setNonInstitutionFundOrganization(Organization nonInstitutionFundOrganization) {
this.nonInstitutionFundOrganization = nonInstitutionFundOrganization;
}
/**
* @deprecated
*/
@Deprecated
@Override
public void setNonInstitutionFundOrgChartOfAccounts(Chart nonInstitutionFundOrgChartOfAccounts) {
this.nonInstitutionFundOrgChartOfAccounts = nonInstitutionFundOrgChartOfAccounts;
}
/**
* @deprecated
*/
@Deprecated
@Override
public void setOrganization(Organization organization) {
this.organization = organization;
}
/**
* @deprecated
*/
@Deprecated
@Override
public void setPurchaseOrderCostSource(PurchaseOrderCostSource purchaseOrderCostSource) {
this.purchaseOrderCostSource = purchaseOrderCostSource;
}
/**
* @deprecated
*/
@Deprecated
@Override
public void setPurchaseOrderTransmissionMethod(PurchaseOrderTransmissionMethod purchaseOrderTransmissionMethod) {
this.purchaseOrderTransmissionMethod = purchaseOrderTransmissionMethod;
}
/**
* @deprecated
*/
@Deprecated
@Override
public void setRecurringPaymentType(RecurringPaymentType recurringPaymentType) {
this.recurringPaymentType = recurringPaymentType;
}
/**
* @deprecated
*/
@Deprecated
@Override
public void setRequisitionSource(RequisitionSource requisitionSource) {
this.requisitionSource = requisitionSource;
}
/**
* Gets the receivingDocumentRequiredIndicator attribute.
* @return Returns the receivingDocumentRequiredIndicator.
*/
@Override
public boolean isReceivingDocumentRequiredIndicator() {
return receivingDocumentRequiredIndicator;
}
/**
* Sets the receivingDocumentRequiredIndicator attribute value.
* @param receivingDocumentRequiredIndicator The receivingDocumentRequiredIndicator to set.
*/
@Override
public void setReceivingDocumentRequiredIndicator(boolean receivingDocumentRequiredIndicator) {
// if receivingDocumentRequiredIndicator functionality is disabled, always set it to false, overriding the passed-in value
if (!isEnableReceivingDocumentRequiredIndicator()) {
receivingDocumentRequiredIndicator = false;
}
else {
this.receivingDocumentRequiredIndicator = receivingDocumentRequiredIndicator;
}
}
@Override
public boolean isPaymentRequestPositiveApprovalIndicator() {
return paymentRequestPositiveApprovalIndicator;
}
@Override
public void setPaymentRequestPositiveApprovalIndicator(boolean paymentRequestPositiveApprovalIndicator) {
// if paymentRequestPositiveApprovalIndicator functionality is disabled, always set it to false, overriding the passed-in value
if (!isEnablePaymentRequestPositiveApprovalIndicator()) {
paymentRequestPositiveApprovalIndicator = false;
}
else {
this.paymentRequestPositiveApprovalIndicator = paymentRequestPositiveApprovalIndicator;
}
}
public List<CommodityCode> getCommodityCodesForRouting() {
return commodityCodesForRouting;
}
public void setCommodityCodesForRouting(List<CommodityCode> commodityCodesForRouting) {
this.commodityCodesForRouting = commodityCodesForRouting;
}
@Override
public String getCapitalAssetSystemTypeCode() {
return capitalAssetSystemTypeCode;
}
@Override
public void setCapitalAssetSystemTypeCode(String capitalAssetSystemTypeCode) {
this.capitalAssetSystemTypeCode = capitalAssetSystemTypeCode;
}
@Override
public String getCapitalAssetSystemStateCode() {
return capitalAssetSystemStateCode;
}
@Override
public void setCapitalAssetSystemStateCode(String capitalAssetSystemStateCode) {
this.capitalAssetSystemStateCode = capitalAssetSystemStateCode;
}
/**
* Gets the justification attribute.
* @return Returns the justification.
*/
public String getJustification() {
return justification;
}
/**
* Sets the justification attribute value.
* @param justification The justification to set.
*/
public void setJustification(String justification) {
this.justification = justification;
}
@Override
public CapitalAssetSystemType getCapitalAssetSystemType() {
if(ObjectUtils.isNull(capitalAssetSystemType)){
this.refreshReferenceObject("capitalAssetSystemType");
}
return capitalAssetSystemType;
}
@Override
public void setCapitalAssetSystemType(CapitalAssetSystemType capitalAssetSystemType) {
this.capitalAssetSystemType = capitalAssetSystemType;
}
@Override
public CapitalAssetSystemState getCapitalAssetSystemState() {
if(ObjectUtils.isNull(capitalAssetSystemState)){
this.refreshReferenceObject("capitalAssetSystemState");
}
return capitalAssetSystemState;
}
@Override
public void setCapitalAssetSystemState(CapitalAssetSystemState capitalAssetSystemState) {
this.capitalAssetSystemState = capitalAssetSystemState;
}
@Override
public List<CapitalAssetSystem> getPurchasingCapitalAssetSystems() {
return purchasingCapitalAssetSystems;
}
@Override
public void setPurchasingCapitalAssetSystems(List<CapitalAssetSystem> purchasingCapitalAssetSystems) {
this.purchasingCapitalAssetSystems = purchasingCapitalAssetSystems;
}
@Override
public List<PurchasingCapitalAssetItem> getPurchasingCapitalAssetItems() {
return purchasingCapitalAssetItems;
}
@Override
public void setPurchasingCapitalAssetItems(List<PurchasingCapitalAssetItem> purchasingCapitalAssetItems) {
this.purchasingCapitalAssetItems = purchasingCapitalAssetItems;
}
@Override
public abstract Class getPurchasingCapitalAssetItemClass();
@Override
public abstract Class getPurchasingCapitalAssetSystemClass();
@Override
public PurchasingItem getPurchasingItem(Integer itemIdentifier){
if(ObjectUtils.isNull(itemIdentifier)) {
return null;
}
PurchasingItem item = null;
for(PurchasingItem pi: (List<PurchasingItem>)this.getItems()){
if(itemIdentifier.equals(pi.getItemIdentifier())){
item = pi;
break;
}
}
return item;
}
@Override
public PurchasingCapitalAssetItem getPurchasingCapitalAssetItem(Integer itemIdentifier){
if(ObjectUtils.isNull(itemIdentifier)) {
return null;
}
PurchasingCapitalAssetItem item = null;
for(PurchasingCapitalAssetItem pcai: this.getPurchasingCapitalAssetItems()){
if(itemIdentifier.equals(pcai.getItemIdentifier())){
item = pcai;
break;
}
}
return item;
}
/**
* @see org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocumentBase#buildListOfDeletionAwareLists()
*/
@Override
public List buildListOfDeletionAwareLists() {
List managedLists = new ArrayList<List>();
managedLists.add(getDeletionAwareAccountingLines());
managedLists.add(getDeletionAwareUseTaxItems());
if (allowDeleteAwareCollection) {
List<ItemCapitalAsset> assetLists = new ArrayList<ItemCapitalAsset>();
if (StringUtils.equals(this.getCapitalAssetSystemTypeCode(),PurapConstants.CapitalAssetSystemTypes.INDIVIDUAL)) {
for (PurchasingCapitalAssetItem capitalAssetItem : this.getPurchasingCapitalAssetItems()) {
//We only need to add the itemCapitalAssets to assetLists if the system is not null, otherwise
//just let the assetLists be empty ArrayList.
if (capitalAssetItem.getPurchasingCapitalAssetSystem() != null) {
assetLists.addAll(capitalAssetItem.getPurchasingCapitalAssetSystem().getItemCapitalAssets());
}
}
}
else {
for (CapitalAssetSystem system : this.getPurchasingCapitalAssetSystems()) {
assetLists.addAll(system.getItemCapitalAssets());
}
}
managedLists.add(assetLists);
managedLists.add(this.getPurchasingCapitalAssetSystems());
managedLists.add(this.getPurchasingCapitalAssetItems());
managedLists.add(this.getItems());
}
return managedLists;
}
/**
* Overrides the method in PurchasingAccountsPayableDocumentBase to remove the
* purchasingCapitalAssetSystem when the system type is either ONE or MULT.
*
* @see org.kuali.kfs.module.purap.document.PurchasingAccountsPayableDocumentBase#prepareForSave(org.kuali.rice.krad.rule.event.KualiDocumentEvent)
*/
@Override
public void prepareForSave(KualiDocumentEvent event) {
super.prepareForSave(event);
if (StringUtils.isNotBlank(this.getCapitalAssetSystemTypeCode())) {
if (this.getCapitalAssetSystemTypeCode().equals(PurapConstants.CapitalAssetSystemTypes.ONE_SYSTEM) || this.getCapitalAssetSystemTypeCode().equals(PurapConstants.CapitalAssetSystemTypes.MULTIPLE)) {
//If the system state is ONE or MULT, we have to remove all the systems on the items because it's not applicable.
for (PurchasingCapitalAssetItem camsItem : this.getPurchasingCapitalAssetItems()) {
camsItem.setPurchasingCapitalAssetSystem(null);
}
}
}
if (event instanceof RouteDocumentEvent || event instanceof ApproveDocumentEvent) {
boolean defaultUseTaxIndicatorValue = SpringContext.getBean(PurchasingService.class).getDefaultUseTaxIndicatorValue(this);
SpringContext.getBean(PurapService.class).updateUseTaxIndicator(this, defaultUseTaxIndicatorValue);
}
}
@Override
public Date getTransactionTaxDate() {
return SpringContext.getBean(DateTimeService.class).getCurrentSqlDate();
}
@Override
public void clearCapitalAssetFields() {
this.getPurchasingCapitalAssetItems().clear();
this.getPurchasingCapitalAssetSystems().clear();
this.setCapitalAssetSystemStateCode(null);
this.setCapitalAssetSystemTypeCode(null);
this.setCapitalAssetSystemState(null);
this.setCapitalAssetSystemType(null);
}
/**
* @return the payment request positive approval indicator
*/
public boolean getPaymentRequestPositiveApprovalIndicatorForSearching() {
return paymentRequestPositiveApprovalIndicator;
}
/**
* @return the receiving document required indicator
*/
public boolean getReceivingDocumentRequiredIndicatorForSearching() {
return receivingDocumentRequiredIndicator;
}
public String getDocumentChartOfAccountsCodeForSearching(){
return chartOfAccountsCode;
}
public String getDocumentOrganizationCodeForSearching(){
return organizationCode;
}
@Override
public boolean shouldGiveErrorForEmptyAccountsProration() {
return true;
}
public String getChartAndOrgCodeForResult(){
return getChartOfAccountsCode() + "-" + getOrganizationCode();
}
public String getDeliveryCampusCodeForSearch(){
return getDeliveryCampusCode();
}
public boolean getHasB2BVendor() {
if (getVendorHeaderGeneratedIdentifier() != null) {
refreshReferenceObject(VendorPropertyConstants.VENDOR_DETAIL);
String campusCode = GlobalVariables.getUserSession().getPerson().getCampusCode();
VendorDetail vendorDetail = getVendorDetail();
if (vendorDetail == null || StringUtils.isEmpty(campusCode))
{
return false; // this should never happen
}
return SpringContext.getBean(VendorService.class).getVendorB2BContract(vendorDetail, campusCode) != null;
}
return false;
}
}