001: /*
002: * Copyright 2007 The Kuali Foundation.
003: *
004: * Licensed under the Educational Community License, Version 1.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/ecl1.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.workflow.module.purap.docsearch;
017:
018: import java.util.ArrayList;
019: import java.util.List;
020:
021: import org.kuali.core.service.DataDictionaryService;
022: import org.kuali.core.util.ObjectUtils;
023: import org.kuali.kfs.KFSPropertyConstants;
024: import org.kuali.kfs.context.SpringContext;
025: import org.kuali.module.chart.bo.Org;
026: import org.kuali.workflow.module.purap.docsearch.attribute.KualiPurchaseOrderIncompleteStatusesAttribute;
027:
028: import edu.iu.uis.eden.docsearch.QueryComponent;
029: import edu.iu.uis.eden.docsearch.SearchAttributeCriteriaComponent;
030:
031: /**
032: * This class...
033: */
034: public class PurchaseOrderDocSearchGenerator extends
035: PurApDocumentSearchGenerator {
036: private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger
037: .getLogger(PurchaseOrderDocSearchGenerator.class);
038:
039: private boolean usingIncompleteStatusCriteria = false;
040:
041: /**
042: * @see org.kuali.workflow.module.purap.docsearch.KualiPurApDocumentSearchGenerator#getErrorMessageForNonSpecialUserInvalidCriteria()
043: */
044: @Override
045: public String getErrorMessageForNonSpecialUserInvalidCriteria() {
046: String chartCodeLabel = SpringContext.getBean(
047: DataDictionaryService.class).getAttributeLabel(
048: Org.class, KFSPropertyConstants.CHART_OF_ACCOUNTS_CODE);
049: String orgCodeLabel = SpringContext.getBean(
050: DataDictionaryService.class).getAttributeLabel(
051: Org.class, KFSPropertyConstants.ORGANIZATION_CODE);
052: return "User must enter a valid " + chartCodeLabel
053: + " and a valid " + orgCodeLabel;
054: }
055:
056: /**
057: * @see org.kuali.workflow.module.purap.docsearch.KualiPurApDocumentSearchGenerator#getGeneralSearchUserRequiredFormFieldNames()
058: */
059: @Override
060: public List<String> getGeneralSearchUserRequiredFormFieldNames() {
061: List<String> fieldNames = new ArrayList<String>();
062: fieldNames.add("purapDocumentChartOfAccountsCode");
063: fieldNames.add("purapDocumentOrganizationCode");
064: return fieldNames;
065: }
066:
067: /**
068: * @see org.kuali.workflow.module.purap.docsearch.KualiPurApDocumentSearchGenerator#getSearchAttributeFormFieldNamesToIgnore()
069: */
070: @Override
071: public List<String> getSearchAttributeFormFieldNamesToIgnore() {
072: List<String> fieldNames = new ArrayList<String>();
073: fieldNames.add("displayType");
074: return fieldNames;
075: }
076:
077: /**
078: * @see org.kuali.workflow.module.purap.docsearch.KualiPurApDocumentSearchGenerator#getSpecificSearchCriteriaFormFieldNames()
079: */
080: @Override
081: public List<String> getSpecificSearchCriteriaFormFieldNames() {
082: List<String> fieldNames = new ArrayList<String>();
083: fieldNames.add("purchaseOrderDocumentPurchaseOrderId");
084: // doc id should be in list but is standard workflow field
085: fieldNames.add("purchaseOrderDocumentRequestorName");
086: fieldNames.add("documentHeaderDescription");
087: fieldNames.add("purapDocumentChartOfAccountsCode");
088: fieldNames.add("purapDocumentOrganizationCode");
089: fieldNames.add("purchaseOrderRequisitionId");
090: return fieldNames;
091: }
092:
093: /**
094: * @see edu.iu.uis.eden.docsearch.StandardDocumentSearchGenerator#generateSearchableAttributeSql(edu.iu.uis.eden.docsearch.SearchAttributeCriteriaComponent,
095: * java.lang.String, int)
096: */
097: @Override
098: protected QueryComponent generateSearchableAttributeSql(
099: SearchAttributeCriteriaComponent criteriaComponent,
100: String whereSqlStarter, int tableIndex) {
101: if (KualiPurchaseOrderIncompleteStatusesAttribute.FIELD_DEF_NAME
102: .equals(criteriaComponent.getFormKey())) {
103: if (isIncompleteStatusBeingUsed(criteriaComponent)) {
104: usingIncompleteStatusCriteria = true;
105: }
106: } else if ("purchaseOrderDocumentStatusCode"
107: .equals(criteriaComponent.getFormKey())) {
108: // if we've previous found the criteria object for incomplete or if we find it now... exclude the statuses in criteria
109: if (usingIncompleteStatusCriteria
110: || isIncompleteStatusBeingUsed(getSearchableAttributeByFieldName(KualiPurchaseOrderIncompleteStatusesAttribute.FIELD_DEF_NAME))) {
111: // found the incomplete status checkbox value so ignore the status code search attribute entry
112: return new QueryComponent();
113: }
114: }
115: return super .generateSearchableAttributeSql(criteriaComponent,
116: whereSqlStarter, tableIndex);
117: }
118:
119: private boolean isIncompleteStatusBeingUsed(
120: SearchAttributeCriteriaComponent incompleteStatusComponent) {
121: return ((ObjectUtils.isNotNull(incompleteStatusComponent)) && (KualiPurchaseOrderIncompleteStatusesAttribute.VALUE_FOR_YES
122: .equals(incompleteStatusComponent)));
123: }
124:
125: }
|