/*
* 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.cam.businessobject;
import java.sql.Date;
import java.util.LinkedHashMap;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.log4j.Logger;
import org.kuali.kfs.coa.businessobject.Account;
import org.kuali.kfs.coa.businessobject.AccountingPeriod;
import org.kuali.kfs.module.cam.CamsPropertyConstants;
import org.kuali.kfs.sys.businessobject.OriginationCode;
import org.kuali.kfs.sys.businessobject.SourceAccountingLine;
import org.kuali.rice.core.api.util.type.KualiDecimal;
import org.kuali.rice.kew.api.KewApiServiceLocator;
import org.kuali.rice.kew.api.doctype.DocumentType;
import org.kuali.rice.kew.doctype.bo.DocumentTypeEBO;
/**
* Accounting line for the asset payment document.
*/
public class AssetPaymentDetail extends SourceAccountingLine {
private static Logger LOG = Logger.getLogger(AssetPaymentDetail.class);
private String expenditureFinancialSystemOriginationCode;
private Date expenditureFinancialDocumentPostedDate;
private boolean transferPaymentIndicator;
private String expenditureFinancialDocumentNumber;
private String expenditureFinancialDocumentTypeCode;
private String postingPeriodCode;
private String purchaseOrderNumber;
private String requisitionNumber;
private KualiDecimal amount;
// bo references
private AccountingPeriod financialDocumentPostingPeriod;
private DocumentTypeEBO expenditureFinancialSystemDocumentTypeCode;
private OriginationCode expenditureFinancialSystemOrigination;
private Account account;
/**
* Default constructor.
*/
public AssetPaymentDetail() {
super();
}
public AssetPaymentDetail(AssetPayment assetPayment) {
// populate AssetPaymentDetail with AssetPayment data
this.setSequenceNumber(assetPayment.getPaymentSequenceNumber());
this.setChartOfAccountsCode(assetPayment.getChartOfAccountsCode());
this.setAccountNumber(assetPayment.getAccountNumber());
this.setSubAccountNumber(assetPayment.getSubAccountNumber());
this.setFinancialObjectCode(assetPayment.getFinancialObjectCode());
this.setFinancialSubObjectCode(assetPayment.getFinancialSubObjectCode());
this.setProjectCode(assetPayment.getProjectCode());
this.setOrganizationReferenceId(assetPayment.getOrganizationReferenceId());
this.setExpenditureFinancialSystemOriginationCode(assetPayment.getFinancialSystemOriginationCode());
this.setExpenditureFinancialDocumentNumber(assetPayment.getDocumentNumber());
this.setExpenditureFinancialDocumentTypeCode(assetPayment.getFinancialDocumentTypeCode());
this.setPurchaseOrderNumber(assetPayment.getPurchaseOrderNumber());
this.setRequisitionNumber(assetPayment.getRequisitionNumber());
this.setExpenditureFinancialDocumentPostedDate(assetPayment.getFinancialDocumentPostingDate());
this.setPostingYear(assetPayment.getFinancialDocumentPostingYear());
this.setPostingPeriodCode(assetPayment.getFinancialDocumentPostingPeriodCode());
this.setAmount(assetPayment.getAccountChargeAmount());
}
/**
* @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
*/
protected LinkedHashMap<String,String> assetPaymentToStringMapper() {
LinkedHashMap<String,String> m = new LinkedHashMap<String,String>();
m.put("documentNumber", this.getDocumentNumber());
m.put("sequenceNumber", this.getSequenceNumber() == null ? "" : this.getSequenceNumber().toString());
m.put("chartOfAccountsCode",getChartOfAccountsCode());
m.put("accountNumber",getAccountNumber());
m.put("subAccountNumber",getSubAccountNumber());
m.put("financialObjectCode",getFinancialObjectCode());
m.put("financialSubObjectCode",getFinancialSubObjectCode());
m.put("projectCode",getProjectCode());
m.put("postingYear",this.getPostingYear().toString());
return m;
}
/**
* Create a key including the
* <li><b>expenditureFinancialDocumentNumber</b></li>
* <li><b>expenditureFinancialDocumentTypeCode</b></li>
* with accounting information for asset payment distribution
*
* Make sure the full accounting line information is part of the key
* chartOfAccount, accountNumber, subAccountNumber, objectCode, subObjectCode, projectCode
*
* @return
*/
public String getAssetPaymentDetailKey() {
LinkedHashMap<String,String> paymentMap = assetPaymentToStringMapper();
paymentMap.put("expenditureFinancialDocumentTypeCode",this.getExpenditureFinancialDocumentTypeCode());
paymentMap.put("expenditureFinancialDocumentNumber",this.getExpenditureFinancialDocumentNumber());
//use SHORT_PREFIX_STYLE so that memory address is not part of the toString output
ToStringBuilder builder = new ToStringBuilder(this, ToStringStyle.SHORT_PREFIX_STYLE);
for (String key : paymentMap.keySet()){
builder.append(key, paymentMap.get(key));
}
return paymentMap.toString();
}
public String getExpenditureFinancialSystemOriginationCode() {
return expenditureFinancialSystemOriginationCode;
}
public void setExpenditureFinancialSystemOriginationCode(String expenditureFinancialSystemOriginationCode) {
this.expenditureFinancialSystemOriginationCode = expenditureFinancialSystemOriginationCode;
}
public Date getExpenditureFinancialDocumentPostedDate() {
return expenditureFinancialDocumentPostedDate;
}
public void setExpenditureFinancialDocumentPostedDate(Date expenditureFinancialDocumentPostedDate) {
this.expenditureFinancialDocumentPostedDate = expenditureFinancialDocumentPostedDate;
}
public boolean isTransferPaymentIndicator() {
return transferPaymentIndicator;
}
public void setTransferPaymentIndicator(boolean transferPaymentIndicator) {
this.transferPaymentIndicator = transferPaymentIndicator;
}
public String getExpenditureFinancialDocumentNumber() {
return expenditureFinancialDocumentNumber;
}
public void setExpenditureFinancialDocumentNumber(String expenditureFinancialDocumentNumber) {
this.expenditureFinancialDocumentNumber = expenditureFinancialDocumentNumber;
}
public String getExpenditureFinancialDocumentTypeCode() {
return expenditureFinancialDocumentTypeCode;
}
public void setExpenditureFinancialDocumentTypeCode(String expenditureFinancialDocumentTypeCode) {
this.expenditureFinancialDocumentTypeCode = expenditureFinancialDocumentTypeCode;
}
public String getPostingPeriodCode() {
return postingPeriodCode;
}
public void setPostingPeriodCode(String postingPeriodCode) {
this.postingPeriodCode = postingPeriodCode;
}
public String getPurchaseOrderNumber() {
return purchaseOrderNumber;
}
public void setPurchaseOrderNumber(String purchaseOrderNumber) {
this.purchaseOrderNumber = purchaseOrderNumber;
}
public String getRequisitionNumber() {
return requisitionNumber;
}
public void setRequisitionNumber(String requisitionNumber) {
this.requisitionNumber = requisitionNumber;
}
public AccountingPeriod getFinancialDocumentPostingPeriod() {
return financialDocumentPostingPeriod;
}
public void setFinancialDocumentPostingPeriod(AccountingPeriod financialDocumentPostingPeriod) {
this.financialDocumentPostingPeriod = financialDocumentPostingPeriod;
}
public DocumentTypeEBO getExpenditureFinancialSystemDocumentTypeCode() {
if ( expenditureFinancialSystemDocumentTypeCode == null || !StringUtils.equals(expenditureFinancialSystemDocumentTypeCode.getName(), expenditureFinancialDocumentTypeCode) ) {
expenditureFinancialSystemDocumentTypeCode = null;
if ( StringUtils.isNotBlank(expenditureFinancialDocumentTypeCode) ) {
DocumentType docType = KewApiServiceLocator.getDocumentTypeService().getDocumentTypeByName(expenditureFinancialDocumentTypeCode);
if ( docType != null ) {
expenditureFinancialSystemDocumentTypeCode = org.kuali.rice.kew.doctype.bo.DocumentType.from(docType);
}
}
}
return expenditureFinancialSystemDocumentTypeCode;
}
public OriginationCode getExpenditureFinancialSystemOrigination() {
return expenditureFinancialSystemOrigination;
}
public void setExpenditureFinancialSystemOrigination(OriginationCode expenditureFinancialSystemOrigination) {
this.expenditureFinancialSystemOrigination = expenditureFinancialSystemOrigination;
}
/**
* Gets the account attribute.
*
* @return Returns the account
*
*/
@Override
public Account getAccount() {
return account;
}
/**
* Sets the account attribute.
*
* @param account The account to set.
* @deprecated
*/
@Deprecated
@Override
public void setAccount(Account account) {
this.account = account;
}
@Override
public KualiDecimal getAmount() {
return amount;
}
@Override
public void setAmount(KualiDecimal amount) {
this.amount = amount;
}
/**
*
* @see org.kuali.kfs.sys.businessobject.AccountingLineBase#getValuesMap()
*/
@Override
public Map getValuesMap() {
Map simpleValues = super.getValuesMap();
simpleValues.put(CamsPropertyConstants.AssetPaymentDetail.ORIGINATION_CODE, getExpenditureFinancialSystemOriginationCode());
simpleValues.put(CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_POSTING_DATE,getExpenditureFinancialDocumentPostedDate());
return simpleValues;
}
}