/* * 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; } }