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.cab.businessobject.lookup;
017
018 import java.util.ArrayList;
019 import java.util.Collection;
020 import java.util.HashMap;
021 import java.util.List;
022 import java.util.Map;
023
024 import org.kuali.kfs.module.cab.CabConstants;
025 import org.kuali.kfs.module.cab.CabPropertyConstants;
026 import org.kuali.kfs.module.cab.businessobject.GeneralLedgerEntry;
027 import org.kuali.kfs.module.cab.businessobject.GeneralLedgerEntryAsset;
028 import org.kuali.kfs.module.cab.businessobject.PurchasingAccountsPayableDocument;
029 import org.kuali.kfs.sys.KFSConstants;
030 import org.kuali.rice.kim.bo.impl.KimAttributes;
031 import org.kuali.rice.kim.bo.types.dto.AttributeSet;
032 import org.kuali.rice.kim.service.KIMServiceLocator;
033 import org.kuali.rice.kim.util.KimConstants;
034 import org.kuali.rice.kns.bo.BusinessObject;
035 import org.kuali.rice.kns.lookup.CollectionIncomplete;
036 import org.kuali.rice.kns.lookup.HtmlData;
037 import org.kuali.rice.kns.lookup.KualiLookupableHelperServiceImpl;
038 import org.kuali.rice.kns.lookup.LookupUtils;
039 import org.kuali.rice.kns.lookup.HtmlData.AnchorHtmlData;
040 import org.kuali.rice.kns.service.BusinessObjectService;
041 import org.kuali.rice.kns.util.GlobalVariables;
042 import org.kuali.rice.kns.util.KNSConstants;
043
044 /**
045 * This class overrides the base getActionUrls method
046 */
047 public class GeneralLedgerEntryLookupableHelperServiceImpl extends KualiLookupableHelperServiceImpl {
048 private static org.apache.log4j.Logger LOG = org.apache.log4j.Logger.getLogger(GeneralLedgerEntryLookupableHelperServiceImpl.class);
049 private BusinessObjectService businessObjectService;
050
051 /**
052 * @see org.kuali.rice.kns.lookup.AbstractLookupableHelperServiceImpl#getCustomActionUrls(org.kuali.rice.kns.bo.BusinessObject,
053 * java.util.List)
054 */
055 @Override
056 public List<HtmlData> getCustomActionUrls(BusinessObject bo, List pkNames) {
057 AttributeSet permissionDetails = new AttributeSet();
058 permissionDetails.put(KimAttributes.NAMESPACE_CODE, "KFS-CAB");
059 permissionDetails.put(KimAttributes.ACTION_CLASS, "PurApLineAction");
060
061 if (!KIMServiceLocator.getIdentityManagementService().isAuthorizedByTemplateName(GlobalVariables.getUserSession().getPrincipalId(), KNSConstants.KNS_NAMESPACE, KimConstants.PermissionTemplateNames.USE_SCREEN, permissionDetails, null)) {
062 return super.getEmptyActionUrls();
063 }
064
065 GeneralLedgerEntry entry = (GeneralLedgerEntry) bo;
066 List<HtmlData> anchorHtmlDataList = new ArrayList<HtmlData>();
067 if (entry.isActive()) {
068 AnchorHtmlData processLink = new AnchorHtmlData("../cabGlLine.do?methodToCall=process&" + CabPropertyConstants.GeneralLedgerEntry.GENERAL_LEDGER_ACCOUNT_IDENTIFIER + "=" + entry.getGeneralLedgerAccountIdentifier(), "process", "process");
069 processLink.setTarget(entry.getGeneralLedgerAccountIdentifier().toString());
070 anchorHtmlDataList.add(processLink);
071 }
072 else {
073 List<GeneralLedgerEntryAsset> generalLedgerEntryAssets = entry.getGeneralLedgerEntryAssets();
074 if (!generalLedgerEntryAssets.isEmpty()) {
075 AnchorHtmlData viewDocLink = new AnchorHtmlData("../cabGlLine.do?methodToCall=viewDoc&" + "documentNumber" + "=" + generalLedgerEntryAssets.get(0).getCapitalAssetManagementDocumentNumber(), "viewDoc", generalLedgerEntryAssets.get(0).getCapitalAssetManagementDocumentNumber());
076 viewDocLink.setTarget(generalLedgerEntryAssets.get(0).getCapitalAssetManagementDocumentNumber());
077 anchorHtmlDataList.add(viewDocLink);
078 }
079 else {
080 anchorHtmlDataList.add(new AnchorHtmlData("", "n/a", "n/a"));
081 }
082 }
083 return anchorHtmlDataList;
084 }
085
086 /**
087 * This method will remove all PO related transactions from display on GL results
088 *
089 * @see org.kuali.rice.kns.lookup.KualiLookupableHelperServiceImpl#getSearchResults(java.util.Map)
090 */
091 @Override
092 public List<? extends BusinessObject> getSearchResults(Map<String, String> fieldValues) {
093 // update status code from user input value to DB value.
094 updateStatusCodeCriteria(fieldValues);
095
096 List<? extends BusinessObject> searchResults = super.getSearchResults(fieldValues);
097 if (searchResults == null || searchResults.isEmpty()) {
098 return searchResults;
099 }
100 Integer searchResultsLimit = LookupUtils.getSearchResultsLimit(GeneralLedgerEntry.class);
101 Long matchingResultsCount = null;
102 List<GeneralLedgerEntry> newList = new ArrayList<GeneralLedgerEntry>();
103 for (BusinessObject businessObject : searchResults) {
104 GeneralLedgerEntry entry = (GeneralLedgerEntry) businessObject;
105 if (!CabConstants.PREQ.equals(entry.getFinancialDocumentTypeCode())) {
106 if (!CabConstants.CM.equals(entry.getFinancialDocumentTypeCode())) {
107 newList.add(entry);
108 }
109 else if (CabConstants.CM.equals(entry.getFinancialDocumentTypeCode())) {
110 Map<String, String> cmKeys = new HashMap<String, String>();
111 cmKeys.put(CabPropertyConstants.PurchasingAccountsPayableDocument.DOCUMENT_NUMBER, entry.getDocumentNumber());
112 // check if CAB PO document exists, if not included
113 Collection<PurchasingAccountsPayableDocument> matchingCreditMemos = businessObjectService.findMatching(PurchasingAccountsPayableDocument.class, cmKeys);
114 if (matchingCreditMemos == null || matchingCreditMemos.isEmpty()) {
115 newList.add(entry);
116 }
117 }
118 }
119 }
120 matchingResultsCount = Long.valueOf(newList.size());
121 if (matchingResultsCount.intValue() <= searchResultsLimit.intValue()) {
122 matchingResultsCount = new Long(0);
123 }
124 return new CollectionIncomplete(newList, matchingResultsCount);
125 }
126
127
128 /**
129 * Update activity status code to the value used in DB. The reason is the value from user input will be 'Y' or 'N'. However,
130 * these two status code are now replaced by 'N','E' and 'P'.
131 *
132 * @param fieldValues
133 */
134 protected void updateStatusCodeCriteria(Map<String, String> fieldValues) {
135 String activityStatusCode = null;
136 if (fieldValues.containsKey(CabPropertyConstants.GeneralLedgerEntry.ACTIVITY_STATUS_CODE)) {
137 activityStatusCode = (String) fieldValues.get(CabPropertyConstants.GeneralLedgerEntry.ACTIVITY_STATUS_CODE);
138 }
139
140 if (KFSConstants.NON_ACTIVE_INDICATOR.equalsIgnoreCase(activityStatusCode)) {
141 // not processed in CAMs: 'N'
142 fieldValues.put(CabPropertyConstants.GeneralLedgerEntry.ACTIVITY_STATUS_CODE, CabConstants.ActivityStatusCode.NEW);
143 }
144 else if (KFSConstants.ACTIVE_INDICATOR.equalsIgnoreCase(activityStatusCode)) {
145 // processed in CAMs: 'E' or 'P'
146 fieldValues.put(CabPropertyConstants.GeneralLedgerEntry.ACTIVITY_STATUS_CODE, CabConstants.ActivityStatusCode.PROCESSED_IN_CAMS + KNSConstants.OR_LOGICAL_OPERATOR + CabConstants.ActivityStatusCode.ENROUTE);
147 }
148
149 }
150
151 /**
152 * Gets the businessObjectService attribute.
153 *
154 * @return Returns the businessObjectService.
155 */
156 public BusinessObjectService getBusinessObjectService() {
157 return businessObjectService;
158 }
159
160 /**
161 * Sets the businessObjectService attribute value.
162 *
163 * @param businessObjectService The businessObjectService to set.
164 */
165 public void setBusinessObjectService(BusinessObjectService businessObjectService) {
166 this.businessObjectService = businessObjectService;
167 }
168 }