diff --git a/coeus-db/coeus-db-sql/src/main/resources/co/kuali/coeus/data/migration/sql/oracle/rice/bootstrap/V1602_001_RESSUP-1416.sql b/coeus-db/coeus-db-sql/src/main/resources/co/kuali/coeus/data/migration/sql/oracle/rice/bootstrap/V1602_001_RESSUP-1416.sql new file mode 100644 index 00000000000..6e830d4f25d --- /dev/null +++ b/coeus-db/coeus-db-sql/src/main/resources/co/kuali/coeus/data/migration/sql/oracle/rice/bootstrap/V1602_001_RESSUP-1416.sql @@ -0,0 +1,3 @@ +INSERT INTO krcr_parm_t (nmspc_cd, cmpnt_cd, parm_nm, obj_id, ver_nbr, parm_typ_cd, val, parm_desc_txt, eval_oprtr_cd, appl_id) + VALUES ('KC-AWARD', 'Document', 'AwardTransactionTypeAllowedValues', sys_guid(), 1, 'CONFG', '', 'Parameter defining allowed Award Transaction Types in Award drop down', 'A', 'KC'); + \ No newline at end of file diff --git a/coeus-impl/src/main/java/org/kuali/kra/award/lookup/keyvalue/AwardTransactionTypeBusinessObjectFilteredValuesFinder.java b/coeus-impl/src/main/java/org/kuali/kra/award/lookup/keyvalue/AwardTransactionTypeBusinessObjectFilteredValuesFinder.java new file mode 100644 index 00000000000..45ef99728e4 --- /dev/null +++ b/coeus-impl/src/main/java/org/kuali/kra/award/lookup/keyvalue/AwardTransactionTypeBusinessObjectFilteredValuesFinder.java @@ -0,0 +1,120 @@ +package org.kuali.kra.award.lookup.keyvalue; + +import java.util.*; + +import org.apache.commons.lang.StringUtils; +import org.kuali.kra.award.home.ValidRates; +import org.kuali.kra.infrastructure.Constants; +import org.kuali.coeus.sys.framework.keyvalue.PrefixValuesFinder; +import org.kuali.kra.timeandmoney.transactions.AwardTransactionType; +import org.kuali.rice.core.api.util.ConcreteKeyValue; +import org.kuali.rice.core.api.util.KeyValue; +import org.kuali.rice.coreservice.framework.CoreFrameworkServiceLocator; +import org.kuali.rice.coreservice.framework.parameter.ParameterService; +import org.kuali.rice.krad.keyvalues.PersistableBusinessObjectValuesFinder; +import org.kuali.rice.krad.service.BusinessObjectService; + +public class AwardTransactionTypeBusinessObjectFilteredValuesFinder extends PersistableBusinessObjectValuesFinder { + + private static final String SYSTEM_PARAMETER_NAME = "AwardTransactionTypeAllowedValues"; + private static final String SYSTEM_PARAMETER_CMPNT_CODE = "Document"; + public static final String TRANSACTION_TYPE_CODE = "awardTransactionTypeCode"; + BusinessObjectService businessObjectService; + + class PBOComparator implements Comparator + { + public int compare(Object kv1, Object kv2 ) + { + try + { + String desc1 = ((KeyValue)kv1).getValue(); + String desc2 = ((KeyValue)kv2).getValue(); + if (desc1 == null) + { + desc1 = ""; + } + if (desc2 == null) + { + desc2 = ""; + } + return desc1.compareTo(desc2); + } + catch (Exception e) + { + return 0; + } + } + + } + /** + * Build the list of KeyValues using the key (keyAttributeName) and + * label (labelAttributeName) of the list of all business objects found + * for the BO class specified along with a "select" entry. + * + * {@inheritDoc} + */ + @Override + public List getKeyValues(){ + List labels; + + labels = super.getKeyValues(); + Collections.sort(labels, new PBOComparator()); + labels.add(0, new ConcreteKeyValue(PrefixValuesFinder.getPrefixKey(), PrefixValuesFinder.getDefaultPrefixValue())); + + ParameterService parameterService = CoreFrameworkServiceLocator.getParameterService(); + // "AwardTransactionTypeAllowedValues" is the value of "parm_nm" column in table "krcr_parm_t" + Collection transactionValues = parameterService.getParameterValuesAsString(Constants.MODULE_NAMESPACE_AWARD, SYSTEM_PARAMETER_CMPNT_CODE, SYSTEM_PARAMETER_NAME); + + // In case the above system parameter is not defined under table "krcr_parm_t" + // Let's return the full list of Award Transaction Types + if (transactionValues == null || transactionValues.size() == 0) { + return labels; + } + + // Otherwise - System parameter has been defined + List filteredLabels = new ArrayList(); + KeyValue [] labelsArray = labels.toArray(new KeyValue[labels.size()]); + Iterator iter = transactionValues.iterator(); + + while (iter.hasNext()) { + String filteredTransactionType = (String) iter.next(); + for (int i = 0; i < labelsArray.length; i++) { + + if (!StringUtils.isBlank(labelsArray[i].getKey()) && !StringUtils.isBlank(filteredTransactionType)) { + if (StringUtils.equals(filteredTransactionType,labelsArray[i].getKey())) { + + // The same index (key) should be used for the filtered list. + // Otherwise the value of the transaction type cannot be displayed for + // readOnlyAlternateDisplay mode when opening the award page + filteredLabels.add(new ConcreteKeyValue(labelsArray[i].getKey(), labelsArray[i].getValue())); + } + } + // If any transaction type defined in table "krcr_parm_t" is not in the original drop down list + // Then we won't add it into the filtered list. + } + } + + Collections.sort(filteredLabels, new PBOComparator()); + // We need "select" on the top of the drop down list as well + filteredLabels.add(0, new ConcreteKeyValue(PrefixValuesFinder.getPrefixKey(), PrefixValuesFinder.getDefaultPrefixValue())); + + return filteredLabels; + } + + /** + * Gets the businessObjectService attribute. + * @return Returns the businessObjectService. + */ + protected BusinessObjectService getBusinessObjectService() { + return businessObjectService; + } + + + /** + * Sets the businessObjectService attribute value. + * @param businessObjectService The businessObjectService to set. + */ + public void setBusinessObjectService(BusinessObjectService businessObjectService) { + this.businessObjectService = businessObjectService; + } +} diff --git a/coeus-impl/src/main/resources/org/kuali/kra/datadictionary/Award.xml b/coeus-impl/src/main/resources/org/kuali/kra/datadictionary/Award.xml index 4b7705d44a6..56f47e8cab2 100644 --- a/coeus-impl/src/main/resources/org/kuali/kra/datadictionary/Award.xml +++ b/coeus-impl/src/main/resources/org/kuali/kra/datadictionary/Award.xml @@ -1170,7 +1170,7 @@