1
2
3
4
5
6
7
8
9
10
11
12
13
14
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 }