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.gl.businessobject; 017 018 import java.util.LinkedHashMap; 019 import java.util.List; 020 021 import org.apache.commons.lang.ArrayUtils; 022 import org.kuali.kfs.coa.service.ObjectTypeService; 023 import org.kuali.kfs.sys.KFSConstants; 024 import org.kuali.kfs.sys.KFSKeyConstants; 025 import org.kuali.kfs.sys.context.SpringContext; 026 import org.kuali.rice.kns.bo.TransientBusinessObjectBase; 027 import org.kuali.rice.kns.service.KualiConfigurationService; 028 import org.kuali.rice.kns.util.KualiDecimal; 029 030 public class PosterOutputSummaryTotal extends TransientBusinessObjectBase implements PosterOutputSummaryAmountHolder { 031 private KualiDecimal creditAmount; 032 private KualiDecimal debitAmount; 033 private KualiDecimal budgetAmount; 034 private KualiDecimal netAmount; 035 036 private String objectTypeCode; 037 038 private final String[] assetExpenseObjectTypeCodes; 039 040 public PosterOutputSummaryTotal() { 041 creditAmount = KualiDecimal.ZERO; 042 debitAmount = KualiDecimal.ZERO; 043 budgetAmount = KualiDecimal.ZERO; 044 netAmount = KualiDecimal.ZERO; 045 046 ObjectTypeService objectTypeService = (ObjectTypeService) SpringContext.getBean(ObjectTypeService.class); 047 List<String> objectTypes = objectTypeService.getCurrentYearExpenseObjectTypes(); 048 objectTypes.add(objectTypeService.getCurrentYearAssetObjectType()); 049 050 assetExpenseObjectTypeCodes = objectTypes.toArray(new String[0]); 051 } 052 053 /** 054 * This method sets the amounts for this poster output summary entry. 055 * 056 * @param debitCreditCode credit code used to determine whether amounts is debit or credit 057 * @param objectTypeCode object type code associated with amount 058 * @param amount amount to add 059 */ 060 public void addAmount(String debitCreditCode, String objectTypeCode, KualiDecimal amount) { 061 062 if (KFSConstants.GL_CREDIT_CODE.equals(debitCreditCode)) { 063 creditAmount = creditAmount.add(amount); 064 if (ArrayUtils.contains(assetExpenseObjectTypeCodes, objectTypeCode)) { 065 netAmount = netAmount.subtract(amount); 066 } 067 else { 068 netAmount = netAmount.add(amount); 069 } 070 } 071 else if (KFSConstants.GL_DEBIT_CODE.equals(debitCreditCode)) { 072 debitAmount = debitAmount.add(amount); 073 if (ArrayUtils.contains(assetExpenseObjectTypeCodes, objectTypeCode)) { 074 netAmount = netAmount.add(amount); 075 } 076 else { 077 netAmount = netAmount.subtract(amount); 078 } 079 } 080 else { 081 netAmount = netAmount.add(amount); 082 budgetAmount = budgetAmount.add(amount); 083 } 084 } 085 086 /** 087 * Adds the totals from the entry to the totals this total line carries 088 * @param entry the entry to add totals from 089 */ 090 public void addAmount(PosterOutputSummaryEntry entry) { 091 debitAmount = debitAmount.add(entry.getDebitAmount()); 092 creditAmount = creditAmount.add(entry.getCreditAmount()); 093 budgetAmount = budgetAmount.add(entry.getBudgetAmount()); 094 netAmount = netAmount.add(entry.getNetAmount()); 095 } 096 097 public KualiDecimal getBudgetAmount() { 098 return budgetAmount; 099 } 100 101 public KualiDecimal getCreditAmount() { 102 return creditAmount; 103 } 104 105 public KualiDecimal getDebitAmount() { 106 return debitAmount; 107 } 108 109 public KualiDecimal getNetAmount() { 110 return netAmount; 111 } 112 113 public String getObjectTypeCode() { 114 return objectTypeCode; 115 } 116 117 public void setObjectTypeCode(String objectTypeCode) { 118 this.objectTypeCode = objectTypeCode; 119 } 120 121 /** 122 * @return a summary of this total line 123 */ 124 public String getSummary() { 125 return SpringContext.getBean(KualiConfigurationService.class).getPropertyString(KFSKeyConstants.MESSAGE_REPORT_POSTER_OUTPUT_SUMMARY_TOTAL); 126 } 127 128 /** 129 * A map of the "keys" of this transient business object 130 * @see org.kuali.rice.kns.bo.BusinessObjectBase#toStringMapper() 131 */ 132 @Override 133 protected LinkedHashMap toStringMapper() { 134 LinkedHashMap pks = new LinkedHashMap<String, Object>(); 135 pks.put("objectTypeCode",this.getObjectTypeCode()); 136 pks.put("creditAmount",this.getCreditAmount()); 137 pks.put("debitAmount",this.getDebitAmount()); 138 pks.put("budgetAmount",this.getBudgetAmount()); 139 pks.put("netAmount",this.getNetAmount()); 140 return pks; 141 } 142 143 }