/*
* 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.ar.businessobject.lookup;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.apache.commons.lang.StringUtils;
import org.kuali.kfs.module.ar.ArPropertyConstants;
import org.kuali.kfs.module.ar.businessobject.CollectionActivityReport;
import org.kuali.kfs.module.ar.report.service.CollectionActivityReportService;
import org.kuali.kfs.sys.KFSConstants;
import org.kuali.rice.core.web.format.Formatter;
import org.kuali.rice.kim.api.identity.Person;
import org.kuali.rice.kns.document.authorization.BusinessObjectRestrictions;
import org.kuali.rice.kns.lookup.HtmlData;
import org.kuali.rice.kns.lookup.HtmlData.AnchorHtmlData;
import org.kuali.rice.kns.web.comparator.CellComparatorHelper;
import org.kuali.rice.kns.web.struts.form.LookupForm;
import org.kuali.rice.kns.web.ui.Column;
import org.kuali.rice.kns.web.ui.ResultRow;
import org.kuali.rice.krad.bo.BusinessObject;
import org.kuali.rice.krad.bo.PersistableBusinessObject;
import org.kuali.rice.krad.lookup.CollectionIncomplete;
import org.kuali.rice.krad.util.GlobalVariables;
import org.kuali.rice.krad.util.KRADConstants;
import org.kuali.rice.krad.util.ObjectUtils;
/**
* LookupableHelperService class for Collection Activity Report.
*/
public class CollectionActivityReportLookupableHelperServiceImpl extends CollectionsReportLookupableHelperServiceImplBase {
protected CollectionActivityReportService collectionActivityReportService;
/**
* Get the search results that meet the input search criteria.
*
* @param fieldValues - Map containing prop name keys and search values
* @return a List of found business objects
*/
@Override
public List getSearchResultsUnbounded(Map fieldValues) {
List<CollectionActivityReport> results = new ArrayList<CollectionActivityReport>();
setBackLocation((String) fieldValues.get(KFSConstants.BACK_LOCATION));
setDocFormKey((String) fieldValues.get(KFSConstants.DOC_FORM_KEY));
results = collectionActivityReportService.filterEventsForCollectionActivity(fieldValues);
return new CollectionIncomplete<CollectionActivityReport>(results, (long) results.size());
}
/**
* This method performs the lookup and returns a collection of lookup items
*
* @param lookupForm
* @param kualiLookupable
* @param resultTable
* @param bounded
* @return
*/
@Override
public Collection performLookup(LookupForm lookupForm, Collection resultTable, boolean bounded) {
Collection displayList = getSearchResultsUnbounded(lookupForm.getFieldsForLookup());
boolean hasReturnableRow = false;
Person user = GlobalVariables.getUserSession().getPerson();
List pkNames = getBusinessObjectMetaDataService().listPrimaryKeyFieldNames(getBusinessObjectClass());
// iterate through result list and wrap rows with return url and action urls
for (Object aDisplayList : displayList) {
BusinessObject element = (BusinessObject) aDisplayList;
BusinessObjectRestrictions businessObjectRestrictions = getBusinessObjectAuthorizationService().getLookupResultRestrictions(element, user);
if (ObjectUtils.isNotNull(getColumns())) {
List<Column> columns = getColumns();
for (Object column : columns) {
Column col = (Column) column;
Formatter formatter = col.getFormatter();
// pick off result column from result list, do formatting
Object prop = ObjectUtils.getPropertyValue(element, col.getPropertyName());
String propValue = ObjectUtils.getFormattedPropertyValue(element, col.getPropertyName(), col.getFormatter());
Class propClass = getPropertyClass(element, col.getPropertyName());
// formatters
if (ObjectUtils.isNotNull(prop)) {
propValue = getContractsGrantsReportHelperService().formatByType(prop, formatter);
}
// comparator
col.setComparator(CellComparatorHelper.getAppropriateComparatorForPropertyClass(propClass));
col.setValueComparator(CellComparatorHelper.getAppropriateValueComparatorForPropertyClass(propClass));
propValue = super.maskValueIfNecessary(element.getClass(), col.getPropertyName(), propValue, businessObjectRestrictions);
col.setPropertyValue(propValue);
// Add url when property is invoiceNumber
if (col.getPropertyName().equals(ArPropertyConstants.INVOICE_NUMBER)) {
String url = contractsGrantsReportHelperService.getDocSearchUrl(propValue);
Map<String, String> fieldList = new HashMap<String, String>();
fieldList.put(ArPropertyConstants.INVOICE_NUMBER, propValue);
AnchorHtmlData a = new AnchorHtmlData(url, KRADConstants.EMPTY_STRING);
a.setTitle(HtmlData.getTitleText(getContractsGrantsReportHelperService().createTitleText(getBusinessObjectClass()), getBusinessObjectClass(), fieldList));
col.setColumnAnchor(a);
} else if (StringUtils.isNotBlank(propValue)) {
col.setColumnAnchor(getInquiryUrl(element, col.getPropertyName()));
}
}
ResultRow row = new ResultRow(columns, KFSConstants.EMPTY_STRING, getActionUrls(element, pkNames, businessObjectRestrictions));
if (element instanceof PersistableBusinessObject) {
row.setObjectId(((PersistableBusinessObject) element).getObjectId());
}
boolean rowReturnable = isResultReturnable(element);
row.setRowReturnable(rowReturnable);
if (rowReturnable) {
hasReturnableRow = true;
}
resultTable.add(row);
}
lookupForm.setHasReturnableRow(hasReturnableRow);
}
return displayList;
}
public CollectionActivityReportService getCollectionActivityReportService() {
return collectionActivityReportService;
}
public void setCollectionActivityReportService(CollectionActivityReportService collectionActivityReportService) {
this.collectionActivityReportService = collectionActivityReportService;
}
}