/*
* 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.ec.businessobject.lookup;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.kuali.kfs.module.ec.businessobject.DuplicateCertificationsReport;
import org.kuali.kfs.module.ec.businessobject.EffortCertificationDocumentBuild;
import org.kuali.kfs.sys.context.SpringContext;
import org.kuali.rice.kns.document.authorization.BusinessObjectRestrictions;
import org.kuali.rice.kns.lookup.HtmlData;
import org.kuali.rice.kns.lookup.KualiLookupableHelperServiceImpl;
import org.kuali.rice.kns.web.struts.form.LookupForm;
import org.kuali.rice.krad.bo.BusinessObject;
import org.kuali.rice.krad.lookup.CollectionIncomplete;
import org.kuali.rice.krad.service.LookupService;
import org.kuali.rice.krad.util.KRADConstants;
/**
* Searches for documents that are not approved.
*/
public class DuplicateCertificationsLookupableHelperServiceImpl extends KualiLookupableHelperServiceImpl {
/**
* @see org.kuali.rice.kns.lookup.LookupableHelperService#getSearchResults(java.util.Map)
*/
public List<? extends BusinessObject> getSearchResults(Map<String, String> fieldValues) {
LookupService lookupService = SpringContext.getBean(LookupService.class);
List<EffortCertificationDocumentBuild> reportList = new ArrayList<EffortCertificationDocumentBuild>(lookupService.findCollectionBySearch(EffortCertificationDocumentBuild.class, fieldValues));
setBackLocation(fieldValues.get(KRADConstants.BACK_LOCATION));
setDocFormKey(fieldValues.get(KRADConstants.DOC_FORM_KEY));
setReferencesToRefresh(fieldValues.get(KRADConstants.REFERENCES_TO_REFRESH));
return findEmployeesWithPayOnMoreThanOneEffortCertificationReport(reportList);
}
@Override
public HtmlData getReturnUrl(BusinessObject businessObject, LookupForm lookupForm, List pkNames, BusinessObjectRestrictions businessObjectRestrictions) {
return getEmptyAnchorHtmlData();
}
/**
* Returns the records for employees who appear on more than one report.
*
* @param reportList
* @return
*/
private List<DuplicateCertificationsReport> findEmployeesWithPayOnMoreThanOneEffortCertificationReport(List<EffortCertificationDocumentBuild> reportList) {
ArrayList<DuplicateCertificationsReport> returnResults = new ArrayList<DuplicateCertificationsReport>();
HashMap<String, List<String>> employeeIdReportNumberMap = findDuplicatesMap(reportList);
//return only records for employees that appear on more than one report
for (EffortCertificationDocumentBuild effortCertificationDocumentBuild : reportList) {
String reportNumber = effortCertificationDocumentBuild.getEffortCertificationReportNumber();
String emplid = effortCertificationDocumentBuild.getEmplid();
if ( employeeIdReportNumberMap.get(emplid).size() >1 ) {
DuplicateCertificationsReport temp = new DuplicateCertificationsReport();
temp.setEffortCertificationReportNumber(effortCertificationDocumentBuild.getEffortCertificationReportNumber());
temp.setUniversityFiscalYear(effortCertificationDocumentBuild.getUniversityFiscalYear());
temp.setEmplid(effortCertificationDocumentBuild.getEmplid());
returnResults.add(temp);
}
}
return new CollectionIncomplete(returnResults, new Long(0));
}
/**
* Returns a map of emplids and the effort certification report numbers they are associated with. To be used to determine which employees appear in more than one report.
*
* @param reportList
* @return
*/
private HashMap<String, List<String>> findDuplicatesMap(List<EffortCertificationDocumentBuild> reportList) {
HashMap<String, List<String>> employeeIdReportNumberMap = new HashMap<String, List<String>>();
//build up map of emplid/ report number list
for (EffortCertificationDocumentBuild effortCertificationDocumentBuild : reportList) {
String reportNumber = effortCertificationDocumentBuild.getEffortCertificationReportNumber();
String emplid = effortCertificationDocumentBuild.getEmplid();
if (employeeIdReportNumberMap.containsKey(emplid)) {
List<String> reportNumbers = employeeIdReportNumberMap.get(emplid);
if (!reportNumbers.contains(reportNumber)) {
reportNumbers.add(reportNumber);
}
} else {
List<String> reportNumbers = new ArrayList<String>();
reportNumbers.add(reportNumber);
employeeIdReportNumberMap.put(emplid, reportNumbers);
}
}
return employeeIdReportNumberMap;
}
}