/* * 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.util.distribution; import java.util.HashMap; import java.util.Map; import org.kuali.kfs.module.cam.businessobject.AssetPaymentAssetDetail; import org.kuali.kfs.module.cam.businessobject.AssetPaymentDetail; import org.kuali.kfs.module.cam.document.AssetPaymentDocument; import org.kuali.rice.core.api.util.type.KualiDecimal; /** * No operation needed. This implementation does no distribution since the user * will perform this manually. */ public class AssetDistributionManual extends AssetDistribution { private Map<String, Map<AssetPaymentAssetDetail, KualiDecimal>> distributionResult; /** * @param assetPaymentDetailLines * @param assetPaymentAssetDetails * @param totalHistoricalCost */ public AssetDistributionManual(AssetPaymentDocument doc) { super(doc); } /** * @see org.kuali.kfs.module.cam.util.distribution.AssetDistribution#getAssetPaymentDistributions() */ public Map<String, Map<AssetPaymentAssetDetail, KualiDecimal>> getAssetPaymentDistributions() { distributionResult = new HashMap<String, Map<AssetPaymentAssetDetail, KualiDecimal>>(); KualiDecimal totalLineAmount = getTotalLineAmount(); for (AssetPaymentDetail line : getAssetPaymentDetailLines()) { KualiDecimal lineAmount = line.getAmount(); KualiDecimal remainingAmount = lineAmount; Map<AssetPaymentAssetDetail, KualiDecimal> apadMap = new HashMap<AssetPaymentAssetDetail, KualiDecimal>(); int size = doc.getAssetPaymentAssetDetail().size(); for (int i = 0; i < size; i++) { AssetPaymentAssetDetail apad = doc.getAssetPaymentAssetDetail().get(i); if (i < size - 1) { double allocationPercentage = 0d; // KualiDecimal allocationPercentage = new KualiDecimal(new BigDecimal(0), 6); if (totalLineAmount.isNonZero()) { allocationPercentage = apad.getAllocatedUserValue().doubleValue() / totalLineAmount.doubleValue(); // allocationPercentage = apad.getAllocatedUserValue().divide(totalLineAmount); } KualiDecimal amount = new KualiDecimal(allocationPercentage * lineAmount.doubleValue()); // KualiDecimal amount = allocationPercentage.multiply(lineAmount); apadMap.put(apad, amount); remainingAmount = remainingAmount.subtract(amount); } else { apadMap.put(apad, remainingAmount); } } distributionResult.put(line.getAssetPaymentDetailKey(), apadMap); } return distributionResult; } /** * Get the total amount from all accounting lines. * * @return */ private KualiDecimal getTotalLineAmount() { KualiDecimal result = KualiDecimal.ZERO; for (AssetPaymentDetail sourceLine : getAssetPaymentDetailLines()) { result = result.add(sourceLine.getAmount()); } return result; } /** * @see org.kuali.kfs.module.cam.util.distribution.AssetDistribution#getTotalAssetAllocations() */ public Map<AssetPaymentAssetDetail, KualiDecimal> getTotalAssetAllocations() { Map<AssetPaymentAssetDetail, KualiDecimal> assetTotalAllocationMap = new HashMap<AssetPaymentAssetDetail, KualiDecimal>(); KualiDecimal allocation, total; for (AssetPaymentAssetDetail apad : doc.getAssetPaymentAssetDetail()) { assetTotalAllocationMap.put(apad, apad.getAllocatedAmount()); } return assetTotalAllocationMap; } }