View Javadoc
1   /**
2    * Copyright 2004-2014 The Kuali Foundation
3    *
4    * Licensed under the Educational Community License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    * http://www.opensource.org/licenses/ecl2.php
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
15   */
16  package org.kuali.kpme.tklm.time.clocklog.web;
17  
18  import org.kuali.kpme.core.api.department.Department;
19  import org.kuali.kpme.core.api.namespace.KPMENamespace;
20  import org.kuali.kpme.core.api.permission.KPMEPermissionTemplate;
21  import org.kuali.kpme.core.lookup.KPMELookupableImpl;
22  import org.kuali.kpme.core.role.KPMERoleMemberAttribute;
23  import org.kuali.kpme.core.service.HrServiceLocator;
24  import org.kuali.kpme.core.util.HrContext;
25  import org.kuali.kpme.tklm.time.clocklog.ClockLogBo;
26  import org.kuali.kpme.tklm.time.service.TkServiceLocator;
27  import org.kuali.rice.kim.api.KimConstants;
28  import org.kuali.rice.kim.api.services.KimApiServiceLocator;
29  
30  import java.util.*;
31  
32  public class ClockLogLookupableImpl extends KPMELookupableImpl {
33  
34  
35  	@Override
36      public boolean allowsMaintenanceNewOrCopyAction() {
37          return false;
38  	}
39  
40      @Override
41      public boolean allowsMaintenanceEditAction(Object dataObject) {
42          return false;
43      }
44  
45      @Override
46      public boolean allowsMaintenanceDeleteAction(Object dataObject) {
47          return false;
48      }
49  
50      @Override
51      protected Collection<?> executeSearch(Map<String, String> searchCriteria, List<String> wildcardAsLiteralSearchCriteria, boolean bounded, Integer searchResultsLimit) {
52  
53          List<ClockLogBo> results = new ArrayList<ClockLogBo>();
54          Collection<?> searchResults = super.executeSearch(searchCriteria, wildcardAsLiteralSearchCriteria, bounded, searchResultsLimit);
55          for (Object searchResult : searchResults) {
56              if(searchResult != null) {
57                  ClockLogBo aClockLog = (ClockLogBo) searchResult;
58                  aClockLog.setClockedByMissedPunch(TkServiceLocator.getClockLogService().isClockLogCreatedByMissedPunch(aClockLog.getTkClockLogId()));
59                  results.add(aClockLog);
60              }
61          }
62  
63          return filterLookupResults(results, HrContext.getPrincipalId()) ;
64      }
65  
66      protected List<ClockLogBo> filterLookupResults(List<ClockLogBo> rawResults, String userPrincipalId) {
67          List<ClockLogBo> results = new ArrayList<ClockLogBo>();
68          for (ClockLogBo clockLogObj : rawResults) {
69  
70  
71              String department = clockLogObj.getDept();
72              String groupKeyCode = clockLogObj.getGroupKeyCode();
73              Department departmentObj = HrServiceLocator.getDepartmentService().getDepartment(department, groupKeyCode, clockLogObj.getClockDateTime().toLocalDate());
74              String location = departmentObj != null ? departmentObj.getGroupKey().getLocationId() : null;
75  
76              Map<String, String> roleQualification = new HashMap<String, String>();
77  
78              roleQualification.put(KimConstants.AttributeConstants.PRINCIPAL_ID, userPrincipalId);
79              roleQualification.put(KPMERoleMemberAttribute.DEPARTMENT.getRoleMemberAttributeName(), department);
80              roleQualification.put(KPMERoleMemberAttribute.GROUP_KEY_CODE.getRoleMemberAttributeName(), groupKeyCode);
81              roleQualification.put(KPMERoleMemberAttribute.LOCATION.getRoleMemberAttributeName(), location);
82  
83              if (!KimApiServiceLocator.getPermissionService().isPermissionDefinedByTemplate(KPMENamespace.KPME_WKFLW.getNamespaceCode(),
84                      KPMEPermissionTemplate.VIEW_KPME_RECORD.getPermissionTemplateName(), new HashMap<String, String>())
85                      || KimApiServiceLocator.getPermissionService().isAuthorizedByTemplate(userPrincipalId, KPMENamespace.KPME_WKFLW.getNamespaceCode(),
86                      KPMEPermissionTemplate.VIEW_KPME_RECORD.getPermissionTemplateName(), new HashMap<String, String>(), roleQualification)) {
87                  results.add(clockLogObj);
88              }
89          }
90  
91          return results;
92      }
93  
94  }