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.bc.businessobject.lookup; 017 018 import java.math.BigDecimal; 019 import java.math.RoundingMode; 020 import java.util.ArrayList; 021 import java.util.Collection; 022 import java.util.Iterator; 023 import java.util.List; 024 import java.util.Map; 025 026 import org.apache.commons.lang.StringUtils; 027 import org.kuali.kfs.integration.ld.LaborLedgerPositionObjectBenefit; 028 import org.kuali.kfs.integration.ld.LaborModuleService; 029 import org.kuali.kfs.module.bc.businessobject.RequestBenefits; 030 import org.kuali.kfs.sys.KFSConstants; 031 import org.kuali.kfs.sys.KFSPropertyConstants; 032 import org.kuali.rice.kns.bo.BusinessObject; 033 import org.kuali.rice.kns.lookup.KualiLookupableHelperServiceImpl; 034 import org.kuali.rice.kns.util.KualiDecimal; 035 import org.kuali.rice.kns.util.KualiInteger; 036 import org.kuali.rice.kns.util.KualiPercent; 037 038 /** 039 * Implements custom search for showing single request line benefits impact 040 */ 041 public class RequestBenefitsLookupableHelperServiceImpl extends KualiLookupableHelperServiceImpl { 042 private LaborModuleService laborModuleService; 043 044 /** 045 * Creates <code>RequestBenefits</code> objects based on a BC expenditure line chart, object code and request amount. 046 * 047 * @see org.kuali.rice.kns.lookup.KualiLookupableHelperServiceImpl#getSearchResults(java.util.Map) 048 */ 049 @Override 050 public List<? extends BusinessObject> getSearchResults(Map<String, String> fieldValues) { 051 052 List<RequestBenefits> requestBenefits = new ArrayList<RequestBenefits>(); 053 054 Integer fiscalYear = Integer.valueOf(fieldValues.get(KFSPropertyConstants.UNIVERSITY_FISCAL_YEAR)); 055 String chartOfAccountsCode = fieldValues.get(KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE); 056 String objectCode = fieldValues.get(KFSConstants.FINANCIAL_OBJECT_CODE_PROPERTY_NAME); 057 List<LaborLedgerPositionObjectBenefit> positionObjectBenefits = laborModuleService.retrieveLaborPositionObjectBenefits(fiscalYear, chartOfAccountsCode, objectCode); 058 for (Iterator<LaborLedgerPositionObjectBenefit> iterator = positionObjectBenefits.iterator(); iterator.hasNext();) { 059 LaborLedgerPositionObjectBenefit positionObjectBenefit = (LaborLedgerPositionObjectBenefit) iterator.next(); 060 061 KualiPercent fringePct = positionObjectBenefit.getLaborLedgerBenefitsCalculation().getPositionFringeBenefitPercent(); 062 RequestBenefits requestBenefit = new RequestBenefits(); 063 requestBenefit.setFinancialObjectBenefitsTypeCode(positionObjectBenefit.getFinancialObjectBenefitsTypeCode()); 064 requestBenefit.setFinancialObjectBenefitsTypeDescription(positionObjectBenefit.getLaborLedgerBenefitsCalculation().getLaborLedgerBenefitsType().getPositionBenefitTypeDescription()); 065 requestBenefit.setPositionFringeBenefitObjectCode(positionObjectBenefit.getLaborLedgerBenefitsCalculation().getPositionFringeBenefitObjectCode()); 066 requestBenefit.setPositionFringeBenefitObjectCodeName(positionObjectBenefit.getLaborLedgerBenefitsCalculation().getPositionFringeBenefitObject().getFinancialObjectCodeName()); 067 requestBenefit.setPositionFringeBenefitPercent(positionObjectBenefit.getLaborLedgerBenefitsCalculation().getPositionFringeBenefitPercent()); 068 069 BigDecimal requestAmount = new BigDecimal(Integer.valueOf(fieldValues.get(KFSPropertyConstants.ACCOUNT_LINE_ANNUAL_BALANCE_AMOUNT))); 070 BigDecimal fringePctDecimal = fringePct.bigDecimalValue().divide(new BigDecimal(100)); 071 BigDecimal result = requestAmount.multiply(fringePctDecimal).setScale(0, RoundingMode.HALF_UP); 072 KualiInteger detAmount = new KualiInteger(result.toBigInteger()); 073 requestBenefit.setFringeDetailAmount(detAmount); 074 requestBenefits.add(requestBenefit); 075 } 076 077 return requestBenefits; 078 } 079 080 /** 081 * Sets the laborModuleService attribute value. 082 * 083 * @param laborModuleService The laborModuleService to set. 084 */ 085 public void setLaborModuleService(LaborModuleService laborModuleService) { 086 this.laborModuleService = laborModuleService; 087 } 088 089 }