/* * 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.gl.businessobject; import java.util.LinkedHashMap; import java.util.List; import org.apache.commons.lang.ArrayUtils; import org.kuali.kfs.coa.service.ObjectTypeService; import org.kuali.kfs.sys.KFSConstants; import org.kuali.kfs.sys.KFSKeyConstants; import org.kuali.kfs.sys.context.SpringContext; import org.kuali.rice.core.api.config.property.ConfigurationService; import org.kuali.rice.core.api.util.type.KualiDecimal; import org.kuali.rice.krad.bo.TransientBusinessObjectBase; public class PosterOutputSummaryTotal extends TransientBusinessObjectBase implements PosterOutputSummaryAmountHolder { private KualiDecimal creditAmount; private KualiDecimal debitAmount; private KualiDecimal budgetAmount; private KualiDecimal netAmount; private String objectTypeCode; private final String[] assetExpenseObjectTypeCodes; public PosterOutputSummaryTotal() { creditAmount = KualiDecimal.ZERO; debitAmount = KualiDecimal.ZERO; budgetAmount = KualiDecimal.ZERO; netAmount = KualiDecimal.ZERO; ObjectTypeService objectTypeService = (ObjectTypeService) SpringContext.getBean(ObjectTypeService.class); List<String> objectTypes = objectTypeService.getCurrentYearExpenseObjectTypes(); objectTypes.add(objectTypeService.getCurrentYearAssetObjectType()); assetExpenseObjectTypeCodes = objectTypes.toArray(new String[0]); } /** * This method sets the amounts for this poster output summary entry. * * @param debitCreditCode credit code used to determine whether amounts is debit or credit * @param objectTypeCode object type code associated with amount * @param amount amount to add */ public void addAmount(String debitCreditCode, String objectTypeCode, KualiDecimal amount) { if (KFSConstants.GL_CREDIT_CODE.equals(debitCreditCode)) { creditAmount = creditAmount.add(amount); if (ArrayUtils.contains(assetExpenseObjectTypeCodes, objectTypeCode)) { netAmount = netAmount.subtract(amount); } else { netAmount = netAmount.add(amount); } } else if (KFSConstants.GL_DEBIT_CODE.equals(debitCreditCode)) { debitAmount = debitAmount.add(amount); if (ArrayUtils.contains(assetExpenseObjectTypeCodes, objectTypeCode)) { netAmount = netAmount.add(amount); } else { netAmount = netAmount.subtract(amount); } } else { netAmount = netAmount.add(amount); budgetAmount = budgetAmount.add(amount); } } /** * Adds the totals from the entry to the totals this total line carries * @param entry the entry to add totals from */ public void addAmount(PosterOutputSummaryEntry entry) { debitAmount = debitAmount.add(entry.getDebitAmount()); creditAmount = creditAmount.add(entry.getCreditAmount()); budgetAmount = budgetAmount.add(entry.getBudgetAmount()); netAmount = netAmount.add(entry.getNetAmount()); } public KualiDecimal getBudgetAmount() { return budgetAmount; } public KualiDecimal getCreditAmount() { return creditAmount; } public KualiDecimal getDebitAmount() { return debitAmount; } public KualiDecimal getNetAmount() { return netAmount; } public String getObjectTypeCode() { return objectTypeCode; } public void setObjectTypeCode(String objectTypeCode) { this.objectTypeCode = objectTypeCode; } /** * @return a summary of this total line */ public String getSummary() { return SpringContext.getBean(ConfigurationService.class).getPropertyValueAsString(KFSKeyConstants.MESSAGE_REPORT_POSTER_OUTPUT_SUMMARY_TOTAL); } /** * A map of the "keys" of this transient business object * @see org.kuali.rice.krad.bo.BusinessObjectBase#toStringMapper() */ protected LinkedHashMap toStringMapper_RICE20_REFACTORME() { LinkedHashMap pks = new LinkedHashMap<String, Object>(); pks.put("objectTypeCode",this.getObjectTypeCode()); pks.put("creditAmount",this.getCreditAmount()); pks.put("debitAmount",this.getDebitAmount()); pks.put("budgetAmount",this.getBudgetAmount()); pks.put("netAmount",this.getNetAmount()); return pks; } }