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.cam.businessobject;
017    
018    import java.sql.Date;
019    import java.util.LinkedHashMap;
020    import java.util.Map;
021    
022    import org.apache.log4j.Logger;
023    import org.kuali.kfs.coa.businessobject.AccountingPeriod;
024    import org.kuali.kfs.module.cam.CamsPropertyConstants;
025    import org.kuali.kfs.sys.businessobject.OriginationCode;
026    import org.kuali.kfs.sys.businessobject.SourceAccountingLine;
027    import org.kuali.kfs.sys.context.SpringContext;
028    import org.kuali.rice.kew.doctype.bo.DocumentTypeEBO;
029    import org.kuali.rice.kew.service.impl.KEWModuleService;
030    import org.kuali.rice.kns.util.KualiDecimal;
031    
032    /**
033     * Accounting line for the asset payment document.
034     */
035    public class AssetPaymentDetail extends SourceAccountingLine {
036        private static Logger LOG = Logger.getLogger(AssetPaymentDetail.class);
037    
038        private String expenditureFinancialSystemOriginationCode;
039        private Date expenditureFinancialDocumentPostedDate;
040        private boolean transferPaymentIndicator;
041    
042        private String expenditureFinancialDocumentNumber;
043        private String expenditureFinancialDocumentTypeCode;
044        private String postingPeriodCode;
045        private String purchaseOrderNumber;
046        private String requisitionNumber;
047        private KualiDecimal amount;
048    
049        // bo references    
050        private AccountingPeriod financialDocumentPostingPeriod;
051        private DocumentTypeEBO expenditureFinancialSystemDocumentTypeCode;
052        private OriginationCode expenditureFinancialSystemOrigination;
053    
054    
055    
056        /**
057         * Default constructor.
058         */
059        public AssetPaymentDetail() {
060            super();
061        }
062    
063        public AssetPaymentDetail(AssetPayment assetPayment) {
064            // populate AssetPaymentDetail with AssetPayment data
065            this.setSequenceNumber(assetPayment.getPaymentSequenceNumber());
066            this.setChartOfAccountsCode(assetPayment.getChartOfAccountsCode());
067            this.setAccountNumber(assetPayment.getAccountNumber());
068            this.setSubAccountNumber(assetPayment.getSubAccountNumber());
069            this.setFinancialObjectCode(assetPayment.getFinancialObjectCode());
070            this.setFinancialSubObjectCode(assetPayment.getFinancialSubObjectCode());
071            this.setProjectCode(assetPayment.getProjectCode());
072            this.setOrganizationReferenceId(assetPayment.getOrganizationReferenceId());
073            this.setExpenditureFinancialSystemOriginationCode(assetPayment.getFinancialSystemOriginationCode());
074            this.setExpenditureFinancialDocumentNumber(assetPayment.getDocumentNumber());
075            this.setExpenditureFinancialDocumentTypeCode(assetPayment.getFinancialDocumentTypeCode());
076            this.setPurchaseOrderNumber(assetPayment.getPurchaseOrderNumber());
077            this.setRequisitionNumber(assetPayment.getRequisitionNumber());
078            this.setExpenditureFinancialDocumentPostedDate(assetPayment.getFinancialDocumentPostingDate());
079            this.setPostingYear(assetPayment.getFinancialDocumentPostingYear());
080            this.setPostingPeriodCode(assetPayment.getFinancialDocumentPostingPeriodCode());
081            this.setAmount(assetPayment.getAccountChargeAmount());
082        }
083        
084        /**
085         * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper()
086         */
087        protected LinkedHashMap<String,String> toStringMapper() {
088            LinkedHashMap<String,String> m = new LinkedHashMap<String,String>();
089            m.put("documentNumber", this.getDocumentNumber());
090            m.put("sequenceNumber", this.getSequenceNumber() == null ? "" : this.getSequenceNumber().toString());
091            m.put("chartOfAccountsCode",getChartOfAccountsCode());
092            m.put("accountNumber",getAccountNumber());
093            m.put("subAccountNumber",getSubAccountNumber());
094            m.put("financialObjectCode",getFinancialObjectCode());
095            m.put("financialSubObjectCode",getFinancialSubObjectCode());
096            m.put("projectCode",getProjectCode());
097            m.put("postingYear",this.getPostingYear().toString());
098            return m;
099        }
100        
101        /**
102         * Create a key including the 
103         * <li><b>expenditureFinancialDocumentNumber</b></li>
104         * <li><b>expenditureFinancialDocumentTypeCode</b></li>
105         * with accounting information for asset payment distribution
106         * 
107         * Make sure the full accounting line information is part of the key
108         * chartOfAccount, accountNumber, subAccountNumber, objectCode, subObjectCode, projectCode 
109         * 
110         * @return
111         */
112        public String getAssetPaymentDetailKey() {
113            LinkedHashMap<String,String> m = toStringMapper();
114            m.put("expenditureFinancialDocumentTypeCode",this.getExpenditureFinancialDocumentTypeCode());
115            m.put("expenditureFinancialDocumentNumber",this.getExpenditureFinancialDocumentNumber());
116            return toStringBuilder(m);
117        }
118    
119        public String getExpenditureFinancialSystemOriginationCode() {
120            return expenditureFinancialSystemOriginationCode;
121        }
122    
123    
124        public void setExpenditureFinancialSystemOriginationCode(String expenditureFinancialSystemOriginationCode) {
125            this.expenditureFinancialSystemOriginationCode = expenditureFinancialSystemOriginationCode;
126        }
127    
128    
129        public Date getExpenditureFinancialDocumentPostedDate() {
130            return expenditureFinancialDocumentPostedDate;
131        }
132    
133    
134        public void setExpenditureFinancialDocumentPostedDate(Date expenditureFinancialDocumentPostedDate) {
135            this.expenditureFinancialDocumentPostedDate = expenditureFinancialDocumentPostedDate;
136        }
137    
138    
139        public boolean isTransferPaymentIndicator() {
140            return transferPaymentIndicator;
141        }
142    
143    
144        public void setTransferPaymentIndicator(boolean transferPaymentIndicator) {
145            this.transferPaymentIndicator = transferPaymentIndicator;
146        }
147    
148    
149        public String getExpenditureFinancialDocumentNumber() {
150            return expenditureFinancialDocumentNumber;
151        }
152    
153    
154        public void setExpenditureFinancialDocumentNumber(String expenditureFinancialDocumentNumber) {
155            this.expenditureFinancialDocumentNumber = expenditureFinancialDocumentNumber;
156        }
157    
158    
159        public String getExpenditureFinancialDocumentTypeCode() {
160            return expenditureFinancialDocumentTypeCode;
161        }
162    
163    
164        public void setExpenditureFinancialDocumentTypeCode(String expenditureFinancialDocumentTypeCode) {
165            this.expenditureFinancialDocumentTypeCode = expenditureFinancialDocumentTypeCode;
166        }
167        
168    
169        public String getPostingPeriodCode() {
170            return postingPeriodCode;
171        }
172    
173    
174        public void setPostingPeriodCode(String postingPeriodCode) {
175            this.postingPeriodCode = postingPeriodCode;
176        }
177    
178    
179        public String getPurchaseOrderNumber() {
180            return purchaseOrderNumber;
181        }
182    
183    
184        public void setPurchaseOrderNumber(String purchaseOrderNumber) {
185            this.purchaseOrderNumber = purchaseOrderNumber;
186        }
187    
188    
189        public String getRequisitionNumber() {
190            return requisitionNumber;
191        }
192    
193    
194        public void setRequisitionNumber(String requisitionNumber) {
195            this.requisitionNumber = requisitionNumber;
196        }
197    
198    
199        public AccountingPeriod getFinancialDocumentPostingPeriod() {
200            return financialDocumentPostingPeriod;
201        }
202    
203    
204        public void setFinancialDocumentPostingPeriod(AccountingPeriod financialDocumentPostingPeriod) {
205            this.financialDocumentPostingPeriod = financialDocumentPostingPeriod;
206        }
207    
208        public DocumentTypeEBO getExpenditureFinancialSystemDocumentTypeCode() {
209            return expenditureFinancialSystemDocumentTypeCode = SpringContext.getBean(KEWModuleService.class).retrieveExternalizableBusinessObjectIfNecessary(this, expenditureFinancialSystemDocumentTypeCode, "expenditureFinancialSystemDocumentTypeCode");
210        }
211    
212        public OriginationCode getExpenditureFinancialSystemOrigination() {
213            return expenditureFinancialSystemOrigination;
214        }
215    
216    
217        public void setExpenditureFinancialSystemOrigination(OriginationCode expenditureFinancialSystemOrigination) {
218            this.expenditureFinancialSystemOrigination = expenditureFinancialSystemOrigination;
219        }
220        
221        public KualiDecimal getAmount() {
222            return amount;
223        }
224    
225    
226        public void setAmount(KualiDecimal amount) {
227            this.amount = amount;
228        }
229    
230        /**
231         * 
232         * @see org.kuali.kfs.sys.businessobject.AccountingLineBase#getValuesMap()
233         */
234        @Override
235        public Map getValuesMap() {
236            Map simpleValues = super.getValuesMap();
237            simpleValues.put(CamsPropertyConstants.AssetPaymentDetail.ORIGINATION_CODE, getExpenditureFinancialSystemOriginationCode());
238            simpleValues.put(CamsPropertyConstants.AssetPaymentDetail.DOCUMENT_POSTING_DATE,getExpenditureFinancialDocumentPostedDate());
239    
240            return simpleValues;
241        }    
242    }